C 語言筆記:Bit 操作
在低階程式設計、嵌入式系統、驅動程式開發中,我們常需要直接操作變數的位元(bit)。
下面筆記幾種工具/用法。
Bitfield
在 struct 裡面用位元為單位定義欄位大小。
struct Status {
unsigned int power : 1; // 1 bit
unsigned int error : 1; // 1 bit
unsigned int mode : 2; // 2 bits
unsigned int count : 4; // 4 bits
};
int main() {
struct Status s = {1, 0, 3, 9};
printf("Size of struct: %zu bytes\n", sizeof(s));
return 0;
}在一些系統中會搭配 union 使用 (請參見 C 語言筆記:保留關鍵字 中的 union)。
另外要注意的是,bit 的順序可能會隨著系統、編譯器的不同而有所改變 (請參見 C 語言筆記:little endian 與 big endian )。跨平台開發時,必須考慮 Endianness,否則同一段程式在不同架構可能產生相反的結果。
Bitwise
針對 bit 進行的運算。
常用運算子:
- &:AND
- |:OR
- ^:XOR;不同為 1,相同為 0
- ~:NOT;反轉所有 bit
- <<:向左移位並補 0(相當於乘 2)
- >>:向右移位並補 0(相當於除 2)
因為 signed int 在許多計算中會出現,所以在
Bitmask
- 設定第二個 bit: value |= BIT2;
- 清除第二個 bit: value &= ~BIT2;
- 切換第二個 bit: value ^= BIT2;
- 檢查第二個 bit 是否為 1: (value & BIT2) != 0;
留言
張貼留言