CPU的大端模式(big endian)和小端(little endian)模式——Union的妙用

      網友投稿 1062 2025-04-02

      作為一個計算機相關專業的人,我們應該在計算機組成中都學習過什么叫Little endian 和Big endian。Little endian 和Big endian 是CPU 存放數據的兩種不同順序。對于整型、長整型等數據類型,Big endian 認為第一個字節是最高位字節(按照從低地址到高地址的順序存放數據的高位字節到低位字節);而Little endian 則相反,它認為第一個字節是最低位字節(按照從低地址到高地址的順序存放數據的低位字節到高位字節)。


      例如,假設從內存地址0x0000 開始有以下數據:

      0x12 0x34 0xab 0xcd

      如 果我們去讀取一個地址為0x0000 的四個字節變量,若字節序為big-endian,則讀出結果為0x1234abcd;若字節序位little-endian,則讀出結果為 0xcdab3412。如果我們將0x1234abcd 寫入到以0x0000 開始的內存中,則Little endian 和Big endian 模式的存放結果如下:

      地址?????????????? 0x0000 0x0001 0x0002 0x0003

      big-endian???????? 0x12?? 0x34?? 0xab?? 0xcd

      little-endian????? 0xcd?? 0xab 0x34?? 0x12

      一般來說,x86 系列CPU 都是little-endian 的字節序,PowerPC 通常是Big endian,還有的CPU 能通過跳線來設置CPU 工作于Little endian 還是Big endian 模式。

      顯然,解答這個問題的方法只能是將一個字節(CHAR/BYTE 類型)的數據和一個整型數據存放于同樣的內存

      開始地址,通過讀取整型數據,分析CHAR/BYTE 數據在整型數據的高位還是低位來判斷CPU 工作于Little

      endian 還是Big endian 模式。得出如下的答案:

      CPU的大端模式(big endian)和小端(little endian)模式——Union的妙用

      [cpp]? view plain ?copy

      typedef?unsigned?char?BYTE;

      int?main(int?argc,?char*?argv[])

      {

      unsigned?int?num,*p;

      p?=?#

      num?=?0;

      *(BYTE?*)p?=?0xff;//指針類型強制轉換

      if(num?==?0xff)

      {

      printf("The?endian?of?cpu?is?little\n");

      }

      else?//num?==?0xff000000

      {

      printf("The?endian?of?cpu?is?big\n");

      }

      return?0;

      }

      [cpp]? view plain ?copy

      int?checkCPU()

      {

      {

      union?w

      {

      int?a;

      char?b;

      }?c;

      c.a?=?1;

      return?(c.b?==?1);

      }

      }

      [cpp]? view plain ?copy

      static?union?{?char?c[4];?unsigned?long?mylong;?}?endian_test?=?{{?'l',?'?',?'?',?'b'?}?};

      #define?ENDIANNESS?((char)endian_test.mylong)

      (如果ENDIANNESS=’l’表示系統為little endian,為’b’表示big endian )。

      延伸閱讀:http://blog.csdn.net/xiajun07061225/article/details/7295355

      Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在Excel表格中進行數據查找(excel表格怎么找數據)
      下一篇:怎么在表格里面搜索數字呢(表格中怎樣才能找到名字對應的數字)
      相關文章
      亚洲youjizz| 亚洲色四在线视频观看| 亚洲美女免费视频| 亚洲va无码手机在线电影| 国产亚洲午夜精品| 亚洲AV成人一区二区三区观看| 亚洲国产日产无码精品| 亚洲福利一区二区精品秒拍| 久久久久亚洲AV无码网站| 亚洲一二成人精品区| 久久精品国产精品亚洲色婷婷| 亚洲乱码国产一区三区| 亚洲精品卡2卡3卡4卡5卡区| 久久亚洲AV永久无码精品| 久久久久亚洲爆乳少妇无 | 亚洲人色婷婷成人网站在线观看| 亚洲视频在线一区二区| 午夜在线亚洲男人午在线| 日本中文一区二区三区亚洲| 亚洲成a人片在线观看老师| vvvv99日韩精品亚洲| 亚洲高清免费视频| 国产性爱在线观看亚洲黄色一级片| 亚洲男人第一无码aⅴ网站| 中文字幕专区在线亚洲| 亚洲国产精品无码成人片久久| 亚洲AV永久无码精品| 亚洲情a成黄在线观看动漫尤物| 亚洲一区二区中文| 91嫩草亚洲精品| 亚洲综合色丁香婷婷六月图片| 亚洲精品自偷自拍无码| 亚洲 另类 无码 在线| 精品国产人成亚洲区| 亚洲精品国产精品乱码视色| 亚洲av日韩av不卡在线观看| 久久久久亚洲AV无码观看| 亚洲国产精品成人综合色在线婷婷 | 日本亚洲欧美色视频在线播放 | 狠狠入ady亚洲精品| 亚洲欧洲日产国码一级毛片|