標題: 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一区二区三区在线观看
|