歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

小端模式與強制數據類型轉換

1.先從一個問題說開去

相關閱讀:http://www.linuxidc.com/Linux/2012-02/53888.htm C++數據類型轉換的問題

[plain]
  1. #include <iostream.h>  
  2. void main()  
  3. {  
  4.     int i=0xb62;  
  5.     char c;  
  6.     c=i;  
  7.     cout<<c<<endl;  
  8. }  

這裡為什麼輸出的是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。
Copyright © Linux教程網 All Rights Reserved