C語言基礎

struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);

執行上方把9放入3位元位元欄位的程式碼時的輸出,下列何者正確?

  1. A1
  2. B7
  3. C9
查看答案與解析

正確答案:A. 1

x 是3位元的無號位元欄位,因此只能表示0~7。把放不進無號型別的值放入時,會成為除以 2³ = 8 的餘數,因此9變成1。位元欄位可用來緊密存放暫存器的設定欄或通訊旗標等小的值,但欄位的位元排列順序等細節因處理系統而異。在 gcc 中,直接把常數9指派給 s.x 會發出警告。

  • A. 正確。9除以8的餘數為1。
  • B. 這是認為會停在最大值7(飽和)時的值。
  • C. 3位元的欄位放不進9,高位的位元會遺失。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 執行上方使用以 #define 定義之巨集 SQUARE 的程式碼時的輸出,下列何者正確?
  2. 標頭檔 sensor.h 寫成上方的樣子。#ifndef、#define、#endif 這3行的目的,下列何者正確?
  3. 把上方程式碼寫在 main 函式中執行時的輸出,下列何者正確?
  4. 微控制器的輸出暫存器以上方的方式宣告並使用。關於這個宣告的說明,下列何者正確?
  5. 關於C語言標準所說的未定義行為,下列說明何者正確?