| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2686 人关注过本帖
标题:请教一个问题,谢谢
只看楼主 加入收藏
荀减一
Rank: 1
等 级:新手上路
帖 子:19
专家分:2
注 册:2016-2-27
收藏
得分:1 
i=4 and not 4
i=1145258561,A
i=A,A
请按任意键继续. . .

这是我的结果..
2016-02-28 20:03
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 31楼 荀减一
用的哪个编译器
2016-02-28 20:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
光是“字節序”這個問題就能把這個話題廢掉,所謂最終結果是末位字符,哪个是末位?有些機器的末位在前,有些在後,你還能指望這個知識點有什麽實效?這書講到這一層,作者就是好走偏門的。

授人以渔,不授人以鱼。
2016-02-28 22:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
這種知識點,用於什麽地方呢?在串行通訊程序中,若你並不知道對方的字節序是什麽的時候,必須先發送自己的協議給對方,好讓對方正確解析你的數據,因爲串行數據是逐個字節傳送的,你的0xABCD到對方那裏,可能被理解爲0xCDAB。歸根到底,是作者教人不走正路,以“強制類型轉換”玩數據造成的問題,把一個int數據自作聰明地賦値給char數據,讓後者取尾字節爲結果,但正如前述,哪頭在末是説不定的,那麽,你寫出這樣的代碼,會在某種環境下出現問題,而你甚至不知道是這裏的原因,因爲大多時候你的結果都是“對”的。根本就不是char和int的問題,其實是所有不同尺寸數據類型的賦値都有這種問題。爲什麽C++要讓程序員寫很繁瑣的類型轉換格式(static_cast)呢?就是要你明確告訴編譯器,這種轉換是你的真實願望,後果自負,即你已經考慮過相關問題了——C可以隨意轉換數據類型,雖然是靈活方便,但帶來的風險也往往是不自知的。

書上不講這樣的東西,不知道的人反而不會出錯,講了之後,他可能無法藏技要拿出來用一番,結果是給自己挖坑。編程業中有一句箴言大意是這樣的,“有時不知道的細節反而是對你的保護”,沒碰過釘子的人,絶不讚同這句話,他們覺得瞭解越多底層的細節是越牛掰,還要時刻想著怎麽那這些細節秀到代碼中,否則別人不知道你知道那麽深入的東西。

多(含不定)字節字符,其數據類型是wchar_t,文字常量是用L前綴標誌的,如L'A'、L'啊'。ANSI編碼的字符,永遠祗按8位二進制長度解析,ANSI編碼下的中文字符,由2個單字符組合而成,是字符數組。Unicode-16編碼下的wchar_t字符,真的是short int,所以把short int賦値給wchar_t是沒問題的,但把short int賦値給char卻一定有問題。

16位機下,'AB'被暫存爲2字節字符數組,是有序的,當它被解析(賦値)爲16位int的時候,結果取決於當前機器的字節序,高低位可能互換('A' * 256 + 'B'或'B' * 256 + 'A'),沒有正確答案,故強制轉換爲char後的結果,可能是'A'也可能是'B'。intel機器是高位在後,故截得的低位字符是'A'。

授人以渔,不授人以鱼。
2016-02-28 23:13
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:1 
回复 29楼 屋顶
先学C语言
2016-02-29 08:15
duwei1989022
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2016-2-29
收藏
得分:1 
字符不是用单引号包围的单个字母吗 不能是多个
2016-02-29 08:46
快速回复:请教一个问题,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018176 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved