什麼是位元欄位(bit-field)

在C語言的結構中,把成員宣告成如 unsigned int x : 3; 這種指定位元數之欄位的機制。可以緊密存放小的值,因此用於整合旗標或設定值。把無號欄位放不下的值存入時,會成為除以2的位元數次方的餘數。欄位從字組的高位還是低位開始排列、欄位是否可跨越邊界等,可以因處理系統而異,因此表示周邊電路的暫存器或通訊格式時,常改用遮罩與移位的寫法。

日文名稱: ビットフィールド

「位元欄位(bit-field)」出現在2領域的2道練習題中(嵌入式與韌體, C語言基礎等)。

這個名詞所屬的領域: C語言基礎

練習位元欄位(bit-field)的題目

以C語言的位元欄位(bit-field)結構來表示週邊電路的暫存器時,需要注意的地方下列何者正確?

  1. A使用位元欄位後,程式一定會變快2倍
  2. B位元欄位的位元排列順序等可依編譯器而異,換成別的編譯器可能會操作到與意圖不同的位元
  3. C位元欄位無法表示8位元以上的值
查看答案與解析

正確答案:B. 位元欄位的位元排列順序等可依編譯器而異,換成別的編譯器可能會操作到與意圖不同的位元

位元欄位寫起來易讀,但在C語言的規格中,結構內的位元是從高位開始排列還是從低位開始排列、欄位跨越邊界時的處理、存取的寬度等,都交由編譯系統決定。因此即使在某個編譯器上正確運作,在別的編譯器或CPU上也可能讀寫到不同的位元。微控制器廠商提供的標頭檔,多半是以遮罩與位移寫成的。

解析中的「位元欄位(bit-field)」

出現「位元欄位(bit-field)」的題目(2題)

  1. 以C語言的位元欄位(bit-field)結構來表示週邊電路的暫存器時,需要注意的地方下列何者正確?
  2. 執行上方把9放入3位元位元欄位的程式碼時的輸出,下列何者正確?

相關名詞

微控制器(MCU) 巨集(macro) 未定義行為 函式指標 前置處理器 指標(pointer) 記憶體洩漏 動態記憶體配置 結構(struct) 對齊與填充

前往名詞解釋列表