摘要:什么是位段語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度,這種以位為單位的成員稱為位段。例如果將位段的類型換為無符號的輸出結(jié)果為我們接下來再用輸出試一下輸出結(jié)果
C語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度,這種以位為單位的成員稱為位段。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。
struct S { char a:3; char b:4; char c:5; char d:4;};struct S s = {0};s.a = 10; s.b = 12; s.c = 3; s.d = 4;
2、位段占的二進制位數(shù)不能超過該基本類型所能表示的最大位數(shù),即位段不能跨字節(jié)存儲,比如在char是占1個字節(jié),那么最多只能是8位;
?這里將_d設(shè)為9編譯器直接報錯
3、在位段中不給其起名字,無法訪問該位段,但是計算大小是仍占空間。
struct A { char _a : 2; char _b : 5; char _c : 8; char : 8;}s;int main(){ printf("%d", sizeof(struct A)); return 0;}
輸出結(jié)果為:
4、不可對位段進行取地址操作
struct A { char _a : 2; char _b : 5; char _c : 8; char : 8;}s;int main(){ printf("%d/n", sizeof(struct A)); char *p = &(s._a);這里對位段中的元素取地址操作 system("pause"); return 0;}
?編譯時直接報錯:
?5、如果位段中存儲的數(shù)據(jù)大于位段自身大小就會發(fā)生截斷問題(在vs2013中測試的結(jié)果),在輸出時會將截斷之后的最高位當作符號位。例:
struct A { char a : 2; char b : 5; char c : 8; char d: 8;}s;int main(){ s.a = 7;//111 s.b = 51;//1 10011 //printf("%d/n", sizeof(struct A)); printf("%d/n", s.a); printf("%d/n",s.b); return 0;}
如果將位段的類型換為無符號的
struct A { unsigned char a : 2; unsigned char b : 5; char c : 8; char d: 8;}s;int main(){ s.a = 7;//111 s.b = 51;//1 10011 //printf("%d/n", sizeof(struct A)); printf("%d/n", s.a); printf("%d/n",s.b); return 0;}
輸出結(jié)果為:
????????
我們接下來再用u%輸出試一下:
struct A { char a : 2; char b : 5; char c :8 ; char : 8;}s;int main(){ s.a = 7;//111 s.b = 51;//1 10011 //printf("%d/n", sizeof(struct A)); printf("a:%u/n", s.a); printf("b:%u/n",s.b); system("pause"); return 0;}
輸出結(jié)果:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123951.html
摘要:結(jié)構(gòu)體類型的特殊聲明在初階結(jié)構(gòu)體中,我們已經(jīng)將了結(jié)構(gòu)體類型是如何進行聲明的,那么在這里,我們將講一些特殊的結(jié)構(gòu)體聲明不完全的聲明。所以我們應(yīng)該這樣寫通過指針來找到下一個同類型結(jié)構(gòu)體的寫法,我們就稱之為結(jié)構(gòu)體的自引用。 ...
摘要:解決方案三結(jié)構(gòu)體變量的定義和初始化有了結(jié)構(gòu)體類型,那要怎么樣來定義結(jié)構(gòu)體變量和初始化變量呢例聲明類型的同時定義變量定義結(jié)構(gòu)體變量初始化定義變量的同時賦初值。 結(jié)構(gòu)體 目錄 一、結(jié)構(gòu)體類型的聲明 結(jié)構(gòu)的聲明 特殊的聲明 二、結(jié)構(gòu)的自引用 結(jié)構(gòu)體正確的自引用方式 三、結(jié)構(gòu)體變量的定義和初始化 四...
摘要:如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)含嵌套結(jié)構(gòu)體的對齊數(shù)的整數(shù)倍。 user_defined_d...
閱讀 644·2021-11-22 15:32
閱讀 2728·2021-11-19 09:40
閱讀 2322·2021-11-17 09:33
閱讀 1280·2021-11-15 11:36
閱讀 1877·2021-10-11 10:59
閱讀 1487·2019-08-29 16:41
閱讀 1792·2019-08-29 13:45
閱讀 2163·2019-08-26 13:36