C Note(NO.7)

位運算符C語言提供了六種位運算符:

&
|
^
~
按位與
按位或
按位異或
取反
<<
>>
左移,高位丟棄,低位補 0
右移,對於有符號數,在右移時,符號位將隨同移動。當爲正數時,最高位補
0,而爲負數時,符號位爲 1,最高位是補 0 或是補 1 取決於編譯系統的規定。

“位域”是把一個字節中的二進位劃分爲幾個不同的區域,並說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。
 1. 位域的定義和位域變量的說明
+

其形式爲:
struct 位域結構名
{ 位域列表 };
其中位域列表的形式爲:
類型說明符 位域名:位域長度
例如:
struct bs
{
int a:8;
int b:2;
int c:6;
};
位域變量的說明與結構變量說明的方式相同。說明 data 爲 bs 變量,共佔兩個字節。其中位域 a 佔 8 位,位域 b 佔 2 位,位域 c 佔 6位。

1) 一個位域必須存儲在同一個字節中,不能跨兩個字節。如一個字節所剩空間不夠存
放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。
例如:
struct bs
{
  unsigned a:4
  unsigned :0 /*空域*/
  unsigned b:4 /*從下一單元開始存放*/
  unsigned c:4
}
在這個位域定義中, a 佔第一字節的 4 位,後 4 位填 0 表示不使用, b 從第二字節
開始,佔用 4 位, c 佔用 4 位。

2) 位域的長度不能大於一個字節的長度

3) 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。
 

位域的使用和結構成員的使用相同,其一般形式爲:
        位域變量名·位域名
位域允許用各種格式輸出,位域也是可以使用指針的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章