1.先從一個問題說開去
相關閱讀:http://www.linuxidc.com/Linux/2012-02/53888.htm
C++數據類型轉換的問題
[plain]
- #include <iostream.h>
- void main()
- {
- int i=0xb62;
- char c;
- c=i;
- cout<<c<<endl;
- }
這裡為什麼輸出的是b?
2.先檢測一下我們所使用的電腦的CPU的字節序
版本一(有問題,結果無論如何都是34,不能說明34是高地址的還是低地址的)
版本二(根據
shineyan1991的留言修改後得到的,在此謝謝 shineyan1991的建議)
從上圖可知,CPU的字節序是小端模式。知識點小端模式(Little-Endian)
數據類型中的高位數據存放於高地址部分,低位數據存放於低地址部分。簡而言之:高位在後,低位在前。
大端模式(Big-Endian)
數據類型中的高位數據存放於低地址部分,低位數據存放於高地址部分。簡而言之:高位在前,低位在後。
3.初步分析
0xb62是十六進制,因為char是一個字節的,所以我們只取低8位(丟棄了高字節,而保留了低字節),這是和語言有關,和CPU的架構無關,一個十六進制位轉換為4個二進制位,所以,低8位就是62轉換的,就是01100010,傳遞給char後,char的值就是98,根據ASCII,就會輸出b。