C語言 位域小問

2021-07-12 07:42:23 字數 805 閱讀 9095

今天看到位域,覺得挺神奇,但是裡面其實有很多坑。有點類似前面位元組對齊的地方,但感覺又不全是。

先給給出幾道題。

1這個是結構體

#include "stdio.h"

#include "stdlib.h"

int main(int argc, char

const *argv)

bitz;

bitz f;

int i=sizeof(f);

printf("%d \n", i);

}

答案是?

2:將結構體改一下

typedef struct bitzone

bitz;

答案?

3:將2中c:2改為c:6 則 i?

4:將2中char改為int 則i?

5:將2中a改為 char a:10; 會出現什麼情況。

6:printf("%d %d\n", f, &f);列印出的值代表什麼?

7:將2中char b:4;改為char b:0; 則 i?

8:a,b,c,d位址存放高低順序,(如果把乙個整形資料轉換為bitz),a,b,c,d各為多少?

9:sizeof(f.a) 可以成立?

10:位域中元素的位址是否可取?

11:如果位域中某個元素不是位域元素,例如把2中char b:4;改為char b;, 則 i?

12:位域元素的溢位

以上幾點基本涵括了位域需要注意的方面。如果遺漏,歡迎指摘。

C語言位域

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存 放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位...

C語言位域

1.乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如 struct bs 在這個位域定義中,a佔第一位元組的 2位,後6位填 0表示不使用,c 從第二位元組開始,占用1位 2.由於位域不允許跨...

C語言 位域

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...