位段:成員必須是int 、unsigned int 和signed int .
位段的成員名後邊有乙個冒號和乙個數字。
eg:
struct s
;s就是乙個位段型別
printf("%d\n",sizeof(struct s));//8
分析:int 型具有四個位元組,共32個位元位,故儲存時將前三個放入第一塊空間中,由於第四個是30個位元位儲存不下,因此開闢下一快空間儲存,即開闢了兩快空間,就是好8個位元組。其他型別同理可得。
和結構相比,位段可以達到同樣的效果,但是可以很好的節省空間,但是有跨平台的問題存在。列舉:一 一枚舉跨平台問題:
1)int 位段被當成有符號數還是無符號數是不確定的;
2)位段中最大的數目不能確定。(16位機器最大16,32位機器最大32)
3)當乙個結構包含兩個位段,第二個位段成員比較大,無法容納第乙個位段剩餘的位時,是捨棄剩餘的位還是利用,不確定。
eg:
enum game
;列舉常量預設值從0開始,依次遞增一,在定義時也可賦初值。
enum game clr=play;//只能拿列舉常量給列舉變數賦值,才不會出現型別的差異。
clr=5; //ok?沒有實際的意義。
聯合(共用體)
是一種特殊的自定義型別,特徵是這些成員公用同一塊空間(所以聯合也叫共用體)。
union un
;union un a;
printf("%d\n",sizeof( a));//4
面試題:判斷當前計算機的大小端儲存。
eg:
>union un
;union un a;
a.i=0x11223344;
a.c=0x55;
printf("%x\n",a.i);//11223355
說明是小端儲存
*小端儲存是低位元組序存在低位址處,故44被55取代;
大端儲存是高位元組序存在低位址處,故11倍55取代。*
聯合體大小的計算:
「` union un
;printf("%d\n",sizeof(union un));//8「`最大成員大小為5,最大對齊數為4,要對齊到最大對齊數的整數倍,故為8
位段,列舉,聯合
前面我們說過了自定義型別,包含結構體,位段,列舉,聯合。前一篇我們總結了結構體,今天來說一下位段,列舉,聯合。一 位段 1 位段概念 c語言中允許在乙個結構體中以位為單位來指定其成員所佔記憶體長度,這種以位為單元的成員稱為 位段 或 位域 1 位段的成員可以是int,unsigned int,sig...
位段 列舉 聯合
2.列舉 3.聯合 1.位段的成員必須是 int,unsigned int signed 即必須是整形家族 這是因為位段的成員是以位元位為單位進行儲存的,假如是浮點型別,給成員乙個5.3的容量,0.3的位元位去 找呢?2.位段的成員名後面有乙個冒號和數字 3.具體宣告如下 1.平時我們開闢空間都是偶...
位段,列舉,聯合的講解
一 位段 位段 度娘給出的解釋是,c語言允許在乙個結構體中以位為單位來指定其成員所佔記憶體長度,這種以位為單位的成員稱為 位段 或稱 位域 bit field 利用位段能夠用較少的位數儲存資料。位段的宣告和結構體很相似,但不同的是 位段的成員可以是int,unsigned int,signed in...