日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

位域(bit fields)简介

發布時間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 位域(bit fields)简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

位域(bit fields)簡介

1、簡介

? ? ?位域是指信息在存儲時,并不需要占用一個完整的字節, 而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省存儲空間,并使處理簡便,C語言又提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域, 并說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。

?

2、位域定義

? ? struct-declarator:?

? ? declarator?

? ? type-specifier declarator opt: constant-expression

? ? 與結構定義相仿,其形式為:

  struct 位域結構名

  {?

    位域列表?

  };

  其中位域列表的形式為: 類型說明符 位域名:位域長度

  例如:

  struct bs

  {

    int a:8;

    int b:2;

    int c:6;

  };

?

3、位域的相關注意事項

  對于位域的定義尚有以下幾點說明:

  1.位域的長度不能大于指定類型固有長度,比如說int的位域長度不能超過32,bool的位域長度不能超過8。

  2.位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

  struct k

  {

    int a:1;

    int :2;/*該2位不能使用*/

    int b:3;

    int c:2;

  };

  從以上分析可以看出,位域在本質上就是一種結構類型, 不過其成員是按二進位分配的。

? ? ? ? 3、位域不能用sizeof運算符進行計算。

?

4、位域的對齊

  如果結構體中含有位域(bit-field),那么VC中準則是:

  1) 如果相鄰位域字段的類型相同,且其位寬之和小于類型的sizeof大小,則后面的字段將緊鄰前一個字段存儲,直到不能容納為止;

  2) 如果相鄰位域字段的類型相同,但其位寬之和大于類型的sizeof大小,則后面的字段將從新的存儲單元開始,其偏移量為其類型大小的整數倍;

  3) 如果相鄰的位域字段的類型不同,則各編譯器的具體實現有差異,VC6采取不壓縮方式(不同位域字段存放在不同的位域類型字節中),Dev-C++和GCC都采取壓縮方式;

  系統會先為結構體成員按照對齊方式分配空間和填塞(padding),然后對變量進行位域操作。

?struct mybitfields

{

? ? unsigned short a : 4;

? ? unsigned short b : 5;

? ? unsigned short c : 7;

} test;

?

int main( void );

{

? ? test.a = 2;

? ? test.b = 31;

? ? test.c = 0;

}

?

the bits would be arranged as follows:

00000001 11110010

cccccccb bbbbaaaa

?

Since the 8086 family of processors stores the low byte of integer values before the high byte, the integer 0x01F2 above would be stored in physical memory as 0xF2 followed by 0x01.


總結

以上是生活随笔為你收集整理的位域(bit fields)简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。