久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux C語言有沒有bit

共計(jì) 2064 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

本文丸趣 TV 小編為大家詳細(xì)介紹“Linux C 語言有沒有 bit”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Linux C 語言有沒有 bit”文章能幫助大家解決疑惑,下面跟著丸趣 TV 小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

Linux C 語言有 bit;在單片機(jī) C 語言中,bit 是新增的一個(gè)關(guān)鍵詞,常用來定義一個(gè)“位變量”;C 語言定義 bit 型數(shù)據(jù)的方法是:1、通過 sbit 或者 bit 定義;2、通過位域(結(jié)構(gòu)體中)定義;3、通過組合位運(yùn)算符定義。

C 語言定義 bit 型數(shù)據(jù):

一、通過 sbit 或者 bit 定義

sbit 映射到 IO 口(P1^1 這種 IO 口的“位”)

bit 在 RAM 中的可位尋址空間中,一般用作程序判斷的標(biāo)志位。

認(rèn)為它們一個(gè)對(duì)外(sbit),一個(gè)對(duì)內(nèi) (bit)。

在單片機(jī) C 語言中,bit 是新增的一個(gè)關(guān)鍵詞, 常用來定義一個(gè)“位變量”

二、通過位域(結(jié)構(gòu)體中)定義

位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:

struct 位域結(jié)構(gòu)名

{位域列表};

其中位域列表的形式為:類型說明符 位域名:位域長(zhǎng)度

例如:

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é)。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6 位。對(duì)于位域的定義尚有以下幾點(diǎn)說明:

1. 一個(gè)位域必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位域時(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. 由于位域不允許跨兩個(gè)字節(jié),因此位域的長(zhǎng)度不能大于一個(gè)字節(jié)的長(zhǎng)度,也就是說不能超過 8 位二進(jìn)位。

3. 位域可以無位域名,這時(shí)它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如:

struct k 
{ 
 int a:1 
 int :2 /* 該 2 位不能使用 */ 
 int b:3 
 int c:2 
};

從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型,不過其成員是按二進(jìn)位分配的。

二、位域的使用

位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為:位域變量名?位域名 位域允許用各種格式輸出。

main(){ 
 struct bs 
 { 
 unsigned a:1; 
 unsigned b:3; 
 unsigned c:4; 
 } bit,*PBit; 
 bit.a=1; 
 bit.b=7; 
 bit.c=15; 
 printf(%d,%d,%d\n ,bit.a,bit.b,bit.c); 
 PBit= bit; 
 PBit-  
 PBit- b  
 PBit- c|=1; 
 printf(%d,%d,%d\n ,PBit- a,PBit- b,PBit-  }

上例程序中定義了位域結(jié)構(gòu) bs,三個(gè)位域?yàn)?a,b,c。說明了 bs 類型的變量 bit 和指向 bs 類型的指針變量 PBit。這表示位域也是可以使用指針的。

程序的 9、10、11 三行分別給三個(gè)位域賦值。(應(yīng)注意賦值不能超過該位域的允許范圍) 程序第 12 行以整型量格式輸出三個(gè)域的內(nèi)容。第 13 行把位域變量 bit 的地址送給指針變量 PBit。第 14 行用指針方式給位域 a 重新賦值,賦為 0。第 15 行使用了復(fù)合的位運(yùn)算符 =,該行相當(dāng)于:PBit- b=PBit- b 3 位域 b 中原有值為 7,與 3 作按位與運(yùn)算的結(jié)果為 3(111 011=011, 十進(jìn)制值為 3)。同樣,程序第 16 行中使用了復(fù)合位運(yùn)算 |=,相當(dāng)于:PBit- c=PBit- c| 1 其結(jié)果為 15。程序第 17 行用指針方式輸出了這三個(gè)域的值。

使用位域的主要目的是壓縮存儲(chǔ),其大致規(guī)則為:

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

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

3)   如果位域字段之間穿插著非位域字段,則不進(jìn)行壓縮;

4)   整個(gè)結(jié)構(gòu)體的總大小為最寬基本類型成員大小的整數(shù)倍。

三、通過通過組合 位運(yùn)算符 來操作

#define Setbit(x,y) (x|=(0x01 y)) // 置位
#define Clrbit(x,y) (x =(~(0x01 y))) // 復(fù)位(清零)#define Chkbit(x,y) (x (0x01 y))  // 檢位 

讀到這里,這篇“Linux C 語言有沒有 bit”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-12發(fā)表,共計(jì)2064字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 崇明县| 新河县| 曲麻莱县| 丁青县| 凤阳县| 双流县| 宣威市| 蓬溪县| 滕州市| 侯马市| 文昌市| 宁远县| 株洲市| 安庆市| 岐山县| 瑞安市| 晴隆县| 句容市| 阿坝县| 通河县| 古丈县| 侯马市| 淄博市| 贵州省| 连山| 宁国市| 横峰县| 桂平市| 县级市| 漾濞| 阿勒泰市| 阿合奇县| 二连浩特市| 乐业县| 无棣县| 乌兰浩特市| 平顺县| 延安市| 桐庐县| 定边县| 杭锦后旗|