国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C語言-位段

alexnevsky / 2727人閱讀

摘要:什么是位段語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度,這種以位為單位的成員稱為位段。例如果將位段的類型換為無符號的輸出結(jié)果為我們接下來再用輸出試一下輸出結(jié)果

1、什么是位段

C語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度,這種以位為單位的成員稱為位段。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。

2、位段在使用中需要注意的一些點:

1、位段的內(nèi)存分配2)位段占的二進制位數(shù)不能超過該基本類型所能表示的最大位數(shù),即位段不能跨字節(jié)存儲,比如在VC中int是占4個字節(jié),那么最多只能是32位;
1. 位段的成員可以是 int unsigned int signed int 或者是 char (屬于整形家族)類型。
2. 位段的空間上是按照需要以 4 個字節(jié)( int )或者 1 個字節(jié)( char )的方式來開辟的。
3. 位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應(yīng)該避免使用位段。
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

相關(guān)文章

  • C語言中還有這些類型,別再說你不知道了!手把手帶你解鎖C語言中的自定義類型,讓你寫你所想。

    摘要:結(jié)構(gòu)體類型的特殊聲明在初階結(jié)構(gòu)體中,我們已經(jīng)將了結(jié)構(gòu)體類型是如何進行聲明的,那么在這里,我們將講一些特殊的結(jié)構(gòu)體聲明不完全的聲明。所以我們應(yīng)該這樣寫通過指針來找到下一個同類型結(jié)構(gòu)體的寫法,我們就稱之為結(jié)構(gòu)體的自引用。 ...

    hizengzeng 評論0 收藏0
  • C語言進階】自定義類型(1)結(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)體變量的定義和初始化 四...

    lanffy 評論0 收藏0
  • 2021-09-05_user_defined_data_types(自定義數(shù)據(jù)類型)

    摘要:如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)含嵌套結(jié)構(gòu)體的對齊數(shù)的整數(shù)倍。 user_defined_d...

    liaosilzu2007 評論0 收藏0

發(fā)表評論

0條評論

alexnevsky

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<