国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C語言中結(jié)構(gòu)體的位域(bit-fields)

2019-11-08 01:49:03
字體:
供稿:網(wǎng)友
有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié), 而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(guān)量時(shí),只有0和1 兩種狀態(tài), 用一位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡(jiǎn)便,C語言又提供了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所謂“位域”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。這樣就可以把幾個(gè)不同的對(duì)象用一個(gè)字節(jié)的二進(jìn)制位域來表示。一、位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為: struct 位域結(jié)構(gòu)名 { 位域列表 }; 其中位域列表的形式為: 類型說明符 位域名:位域長度 例如: struct bs { int a:8; int b:2; int c:6; }; 位域變量的說明與結(jié)構(gòu)變量說明的方式相同。 可采用先定義后說明,同時(shí)定義說明或者直接說明這三種方式。例如: struct bs { int a:8; int b:2; int c:6; }data; 說明data為bs變量,共占兩個(gè)字節(jié)(這里假定int類型長度為16位,通常int都是32位)。其中位域a占8位,位域b占2位,位域c占6位。對(duì)于位域的定義尚有以下幾點(diǎn)說明: 1. 一個(gè)位域必須存儲(chǔ)在同一個(gè)單元中,不能跨兩個(gè)單元。如一個(gè)單元所剩空間不夠存放另一位域時(shí),應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如: struct bs { unsigned a:4 unsigned :0  unsigned b:4  unsigned c:4 } 這個(gè)位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從第二字節(jié)開始,占用4位,c占用4位。 2. 位域可以無位域名,這時(shí)它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如: struct k { int a:1 int :2  int b:3 int c:2 }; 從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型, 不過其成員是按二進(jìn)位分配的。簡(jiǎn)而言之,言而簡(jiǎn)之這是位域操作的表示方法,也就是說后面加上“:1”的意思是這個(gè)成員的大小占所定義類型的1 bit,“:2”占2 bit,依次類推。當(dāng)然大小不能超過所定義類型包含的總bit數(shù)。 一個(gè)bytes(字節(jié))是8 bit(bit)。例如你的結(jié)構(gòu)中定義的類型是u_char,一個(gè)字節(jié),共8bit,最大就不能超過8。 32位機(jī)下, short是2字節(jié),共16bit,最大就不能超過16. int是4字節(jié),共32bit,最大就不能超過32. 依次類推。 這樣定義比較省空間。例如你上面的結(jié)構(gòu),定義的變量類型是u_char,是一字節(jié)類型,即8bit。 fc_subtype占了4bit,fc_type占2bit,fc_PRotocol_version占2bit,共8bit,正好是一個(gè)字節(jié)。 其他八個(gè)成員,各占1bit,共8bit,正好也是一個(gè)字節(jié)。 因此你的結(jié)構(gòu)的大小如果用sizeof(struct frame_control)計(jì)算,就是2bytes.
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 磴口县| 车致| 沾化县| 阿城市| 大埔区| 梓潼县| 永修县| 碌曲县| 敦化市| 卓资县| 桐柏县| 比如县| 商南县| 工布江达县| 和平区| 平泉县| 谷城县| 蓬安县| 勐海县| 淮北市| 漳平市| 额敏县| 惠州市| 江都市| 拜城县| 金沙县| 鹿邑县| 乌兰浩特市| 桐城市| 来凤县| 成武县| 休宁县| 北票市| 大洼县| 藁城市| 黄陵县| 古交市| 滕州市| 常宁市| 晴隆县| 余庆县|