C語言基礎
uint8_t r = 0x5A;
r |= 0x01;
r &= ~0x10;
r ^= 0x0F;
printf("0x%02X\n", r);uint8_t 是8位元的無號整數型別。執行上方程式碼時的輸出,下列何者正確?
- A0x44
- B0x4F
- C0x54
查看答案與解析
正確答案:A. 0x44
0x5A 以二進位表示為 0101 1010。|= 0x01 把位元0設為1,得到 0101 1011(0x5B);&= ~0x10 把位元4清為0,得到 0100 1011(0x4B)。最後的 ^= 0x0F 把低4位元反轉,得到 0100 0100,也就是 0x44。| 用來把位元設為1,& 與 ~ 的組合用來把位元清為0,^ 用來反轉位元。
- A. 正確。值依 0x5A → 0x5B → 0x4B → 0x44 變化。
- B. 這是把最後的 ^= 誤當成 |=,把低4位元設為1時的值(0x4B | 0x0F = 0x4F)。
- C. 這是沒有執行 &= ~0x10、未把位元4清為0時的值(0x5B ^ 0x0F = 0x54)。