C語言基礎
struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);執行上方把9放入3位元位元欄位的程式碼時的輸出,下列何者正確?
- A1
- B7
- C9
查看答案與解析
正確答案:A. 1
x 是3位元的無號位元欄位,因此只能表示0~7。把放不進無號型別的值放入時,會成為除以 2³ = 8 的餘數,因此9變成1。位元欄位可用來緊密存放暫存器的設定欄或通訊旗標等小的值,但欄位的位元排列順序等細節因處理系統而異。在 gcc 中,直接把常數9指派給 s.x 會發出警告。
- A. 正確。9除以8的餘數為1。
- B. 這是認為會停在最大值7(飽和)時的值。
- C. 3位元的欄位放不進9,高位的位元會遺失。