C語言基礎

uint8_t r = 0x5A;
r |= 0x01;
r &= ~0x10;
r ^= 0x0F;
printf("0x%02X\n", r);

uint8_t 是8位元的無號整數型別。執行上方程式碼時的輸出,下列何者正確?

  1. A0x44
  2. B0x4F
  3. 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)。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. uint8_t 是8位元的無號整數型別。執行上方讓 x 遞增10次的程式碼時的輸出,下列何者正確?
  2. unsigned char 為8位元,int 為32位元。執行上方程式碼時的輸出,下列何者正確?
  3. uint8_t 是8位元的無號整數型別,int 為32位元。執行上方程式碼時的結果,下列何者正確?
  4. int 與 unsigned int 為32位元。執行上方程式碼時的結果,下列何者正確?
  5. unsigned int 為32位元。執行上方程式碼時的動作,下列何者正確?