久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: C++中Union數據結構的使用 [打印本頁]

作者: liuyang    時間: 2012-2-13 23:45
標題: C++中Union數據結構的使用
 
  聯合體:Union同結構體struct類似,均可以存儲不同類型的變量,不同的是Union是其成員變量共享一段內存空間,內存空間按其 存儲體積最大類型的成員變量分別,比如Union有char,int,float型成員變量,則該聯合體則按float型分配,而各成員變量存儲時起始位 置是相同的。各成員對用的內存是分時共享的,正因為如此,在某一時候,只能使用其中一個成員。聯合體變量各成員的類型可以是基本的數據類型,比如整型、實 型、字符型等,也可以是數組、結構體類型甚至聯合體類型或指針。相反,聯合體變量也可以作為數組元素或結構體變量的成員出現。union成員的訪問:基本 變量類型通過"."訪問:即:聯合體變量名.成員名;指針標量則是"->",即:聯合體變量名->成員名。訪問方式與結構體相同。
  應用示例:編寫一段程序判斷系統中的CPU是Little endian還是Big endian模式
分析:小端模式(Little endian)和大端(Big endian)模式講的是CPU對數據存取的字節順序。小端模式是先存取數據的低位字節,再依次存取次高字節,大端模式則相反,先將數據的高位字節存取, 在依次存取次低字節數據。這好比吃甘蔗,假設以甘蔗的根部一節比喻大端(數據的高位字節),頂部一節比喻小端(數據的低位字節),一節一節地按順序砍下來 吃,大端模式則從根部砍起,小端模式則從頂端砍起。假設我們要將0x1234abcd寫入到以0x0000開始的內存中,下圖的存儲方式可以直觀地表現出 兩種存取模式。
  
地址
0x0000
0x0001
0x0002
0x0003
big-endian
0x12
0x34
0xab
0xcd
little-endian
0xcd
0xab
0x34
0x12
  而CPU對內存地址的讀寫由數據指針寄存器決定,一般是由內存地址的低向高的順序的。  一般來說,x86系列CPU都是little-endian的字節序,PowerPC通常是Big endian,還有的CPU能通過跳線來設置CPU工作于Little endian還是Big endian模式。而MS51單片機則有些特殊,內存是分區的,其中有一段是堆棧區,眾所周知,堆棧的存取既不是大端也不是小端是FILO的。
利用union測試CPU的例程(函數):
int checkCPU()
{
 {
  union w
  {
   int a; //整形成員變量4B
   char b; //字符型變量1B
  } c; //define union object  "c"
  c.a = 1;  //賦初值1,a=b=0x01

  if(c.b==1)
        cout<<"The endian of cpu is little\n"; //1存于低位字節,b在低8位
    else
       cout<<"The endian of cpu is big\n";  //1存于高位字節,b在低8位
 }
}
這只是一個檢測函數,還需用main函數調用





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天插天天射 | 久久av片| 亚洲黄色在线视频 | 精品免费国产一区二区三区四区 | 日韩小视频在线观看 | 国产剧情在线 | 国产视频h | 求av网站 | 欧美日韩国产精品 | 18成人免费观看网站 | 日韩城人免费 | 手机看片国产 | 免费在线观看毛片 | 男女av在线| 一区二区久久 | 国产精品久久久久久久久久久久午夜片 | 婷婷在线视频 | 国产精品视频专区 | 亚洲成人福利 | 91白浆| 中文字幕免费在线 | 久久久久九九九九 | 中文字幕高清在线 | 欧美日韩中文字幕在线 | 成人精品国产 | 欧美专区在线观看 | 一级中国毛片 | 精品黄色| 天天干天天做 | 一区二区三区四区精品 | 六十路av| 日韩精品视频在线免费观看 | 亚洲综合激情五月久久 | 日韩特级片| 在线a视频 | 午夜精品一区二区三区在线播放 | 天堂一区二区三区 | 色黄大色黄女片免费中国 | 久热久 | 一本一道久久a久久精品蜜桃 | av一区二区三区在线观看 |