最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中關(guān)于union的使用方法說(shuō)明

 更新時(shí)間:2022年11月24日 10:45:41   作者:棉猴  
這篇文章主要介紹了C++中關(guān)于union的使用方法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1 概述

1.1 定義

union即為聯(lián)合,它是一種特殊的類。通過(guò)關(guān)鍵字union進(jìn)行定義,一個(gè)union可以有多個(gè)數(shù)據(jù)成員。

例如:

union Token{
   char cval;
   int ival;
   double dval;
};

以上代碼定義了一個(gè)名為T(mén)oken的聯(lián)合,該聯(lián)合中包含了3個(gè)數(shù)據(jù)成員。

1.2 互斥賦值

在任意時(shí)刻,聯(lián)合中只能有一個(gè)數(shù)據(jù)成員可以有值。

當(dāng)給聯(lián)合中某個(gè)成員賦值之后,該聯(lián)合中的其它成員就變成未定義狀態(tài)了。

Token token;
 
token.cval = 'a';
 
token.ival = 1;
 
token.dval = 2.5;

以上代碼定義了聯(lián)合Token的一個(gè)變量token,此時(shí)token所占內(nèi)存的數(shù)據(jù)如圖1所示。

圖1 token所占內(nèi)存數(shù)據(jù)

紅色方框內(nèi)的數(shù)據(jù)即為token所占內(nèi)存數(shù)據(jù)。因?yàn)閠oken中長(zhǎng)度最大的變量是double類型,所以token的長(zhǎng)度是8個(gè)字節(jié)。

之后首先為token的變量cval賦值,此時(shí)token所占內(nèi)存的數(shù)據(jù)如圖2所示。

 

圖2 token所占內(nèi)存數(shù)據(jù)

此時(shí),token所占內(nèi)存的第一個(gè)字節(jié)的值變?yōu)?x61,即字符’a’。

接下來(lái)為token的變量ival賦值,此時(shí)token所占內(nèi)存的數(shù)據(jù)如圖3所示。

 

圖3 token所占內(nèi)存數(shù)據(jù)

此時(shí),token所占內(nèi)存的前四個(gè)字節(jié)變?yōu)?x00000001,即為數(shù)字1。在對(duì)token的ival賦值之后,cval的值就變?yōu)榱?x01,實(shí)際上就沒(méi)有意義了。

最后,為token的變量dval賦值,此時(shí)token所占內(nèi)存的數(shù)據(jù)如圖4所示。

圖4 token所占內(nèi)存數(shù)據(jù)

此時(shí),token所占內(nèi)存的八個(gè)字節(jié)都有了相應(yīng)的值。在對(duì)token的dval賦值之后,cval的值變?yōu)榱?x00,而ivale的值變?yōu)榱?x00000000,都沒(méi)有了實(shí)際意義,也就是之前提到的未定義狀態(tài)。

1.3 訪問(wèn)權(quán)限

聯(lián)合可以為其成員指定public、protected和private等訪問(wèn)權(quán)限,默認(rèn)情況下,其成員的訪問(wèn)權(quán)限為public。在“1.1 定義”中定義的聯(lián)合Token,其三個(gè)成員的訪問(wèn)權(quán)限均為public。

2 為成員指定長(zhǎng)度

在“1.2 互斥賦值”中提到,聯(lián)合的存儲(chǔ)空間至少能夠容納其最大的數(shù)據(jù)成員。

也可以為聯(lián)合的成員指定長(zhǎng)度。

通過(guò)冒號(hào)操作符來(lái)實(shí)現(xiàn)成員長(zhǎng)度的指定。

union U {
 
unsigned short int aa;
 
struct {
 
unsigned int bb : 7;//(bit 0-6)
 
unsigned int cc : 6;//(bit 7-12)
 
unsigned int dd : 3;//(bit 13-15)
 
};
 
} u;

以上代碼定義了一個(gè)名為U的聯(lián)合,并且定義了U的變量u。

聯(lián)合U包含兩個(gè)成員,一個(gè)是unsigned short int類型的變量,其大小為2個(gè)字節(jié);另一個(gè)是一個(gè)自定義結(jié)構(gòu),該自定義結(jié)構(gòu)中包含了3個(gè)unsigned int類型的變量。

需要注意的是,每個(gè)unsigned int類型的變量的大小并不是默認(rèn)的4個(gè)字節(jié),而是通過(guò)冒號(hào)操作符指定了其大小,該大小的單位是比特。所以,聯(lián)合u的大小是2個(gè)字節(jié)。

之后,對(duì)聯(lián)合u中的aa進(jìn)行賦值

u.aa = 0xE07F;

此時(shí),聯(lián)合u所占的內(nèi)存數(shù)據(jù)如圖5所示。

圖5 聯(lián)合u所占內(nèi)存數(shù)據(jù)

此時(shí),u.bb所處的位置是0-6比特;u.cc所處的位置是7-12比特;u.dd所處的位置是13-15比特,如圖6所示。

圖6 聯(lián)合u的結(jié)構(gòu)

所以,此時(shí)u.bb的值是127;u.cc的值是0;u.dd的值是7。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

油尖旺区| 武功县| 苗栗县| 灌南县| 黄大仙区| 邢台市| 麦盖提县| 运城市| 乌海市| 磴口县| 双江| 大丰市| 左贡县| 朝阳区| 友谊县| 南投县| 广灵县| 石景山区| 凭祥市| 依兰县| 神木县| 徐闻县| 铁岭县| 瑞丽市| 兴和县| 阳新县| 高阳县| 浑源县| 句容市| 陆丰市| 三门峡市| 南平市| 张掖市| 冀州市| 桃园县| 彭山县| 乐山市| 重庆市| 迁安市| 兴安盟| 阿巴嘎旗|