欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: C++中Union數(shù)據(jù)結(jié)構(gòu)的使用 [打印本頁]

作者: liuyang    時間: 2012-2-13 23:45
標(biāo)題: C++中Union數(shù)據(jù)結(jié)構(gòu)的使用
 
  聯(lián)合體:Union同結(jié)構(gòu)體struct類似,均可以存儲不同類型的變量,不同的是Union是其成員變量共享一段內(nèi)存空間,內(nèi)存空間按其 存儲體積最大類型的成員變量分別,比如Union有char,int,float型成員變量,則該聯(lián)合體則按float型分配,而各成員變量存儲時起始位 置是相同的。各成員對用的內(nèi)存是分時共享的,正因?yàn)槿绱耍谀骋粫r候,只能使用其中一個成員。聯(lián)合體變量各成員的類型可以是基本的數(shù)據(jù)類型,比如整型、實(shí) 型、字符型等,也可以是數(shù)組、結(jié)構(gòu)體類型甚至聯(lián)合體類型或指針。相反,聯(lián)合體變量也可以作為數(shù)組元素或結(jié)構(gòu)體變量的成員出現(xiàn)。union成員的訪問:基本 變量類型通過"."訪問:即:聯(lián)合體變量名.成員名;指針標(biāo)量則是"->",即:聯(lián)合體變量名->成員名。訪問方式與結(jié)構(gòu)體相同。
  應(yīng)用示例:編寫一段程序判斷系統(tǒng)中的CPU是Little endian還是Big endian模式
分析:小端模式(Little endian)和大端(Big endian)模式講的是CPU對數(shù)據(jù)存取的字節(jié)順序。小端模式是先存取數(shù)據(jù)的低位字節(jié),再依次存取次高字節(jié),大端模式則相反,先將數(shù)據(jù)的高位字節(jié)存取, 在依次存取次低字節(jié)數(shù)據(jù)。這好比吃甘蔗,假設(shè)以甘蔗的根部一節(jié)比喻大端(數(shù)據(jù)的高位字節(jié)),頂部一節(jié)比喻小端(數(shù)據(jù)的低位字節(jié)),一節(jié)一節(jié)地按順序砍下來 吃,大端模式則從根部砍起,小端模式則從頂端砍起。假設(shè)我們要將0x1234abcd寫入到以0x0000開始的內(nèi)存中,下圖的存儲方式可以直觀地表現(xiàn)出 兩種存取模式。
  
地址
0x0000
0x0001
0x0002
0x0003
big-endian
0x12
0x34
0xab
0xcd
little-endian
0xcd
0xab
0x34
0x12
  而CPU對內(nèi)存地址的讀寫由數(shù)據(jù)指針寄存器決定,一般是由內(nèi)存地址的低向高的順序的。  一般來說,x86系列CPU都是little-endian的字節(jié)序,PowerPC通常是Big endian,還有的CPU能通過跳線來設(shè)置CPU工作于Little endian還是Big endian模式。而MS51單片機(jī)則有些特殊,內(nèi)存是分區(qū)的,其中有一段是堆棧區(qū),眾所周知,堆棧的存取既不是大端也不是小端是FILO的。
利用union測試CPU的例程(函數(shù)):
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存于低位字節(jié),b在低8位
    else
       cout<<"The endian of cpu is big\n";  //1存于高位字節(jié),b在低8位
 }
}
這只是一個檢測函數(shù),還需用main函數(shù)調(diào)用





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1