程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 關鍵字union的巧用,經典面試源代碼

關鍵字union的巧用,經典面試源代碼

編輯:關於C

 

請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1

 

大家都知道,采用Little-endian模式的CPU對操作數的存放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。

 

例如,16bit寬的數0x1234在Little- endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:

內存地址 存放內容

0×4000  0×34

0x4001  0×12

 

而在Big-endian模式CPU內存中的存放方式則為:

內存地址 存放內容

0×4000 0×12

0×4001 0×34

 

32bit寬的數0x12345678在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:

內存地址 存放內容

0×4000 0×78

0×4001 0×56

0×4002 0×34

0×4003 0×12

 

而在Big-endian模式CPU內存中的存放方式則為:

內存地址 存放內容

0×4000 0×12

0×4001 0×34

0×4002 0×56

0×4003 0×78

 

 

源碼就可以寫成這樣:

int checkCPU()

{

 {

  union u

  {

   int a;

   char b;

  } c;

  c.a = 1;

  return (c.b == 1);

 }

}

www.2cto.com

聯合體union的存放順序是所有成員都從低地址開始存放,利用該特性,就能輕松地獲得了CPU對內存采用Little-endian還是Big-endian模式讀寫。

 

這比任何判斷語句都要輕松,快捷!

 

請關注 李木空間  www.limou.net

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved