嵌入式與韌體

檢查輸入用暫存器in的位元5是否為1,下列何種C語言條件正確?

  1. Aif (in | (1 << 5))
  2. Bif (in == 5)
  3. Cif (in & (1 << 5))
查看答案與解析

正確答案:C. if (in & (1 << 5))

「in & (1 << 5)」會變成將位元5以外全部清為0的值,因此位元5為1時結果為32(非0即為真),為0時結果為0(假)。C語言中非0即為真,所以可直接作為if敘述的條件。若想讓結果為1或0,可寫成「(in >> 5) & 1」。若用OR,結果必定為非0,等於沒有檢查。

  • A. OR的結果一定為非0,條件永遠為真。
  • B. 這是在比較值是否為5,與位元5無關。
  • C. 正確。將位元5以外清為0後檢視剩下的部分。
練習這個領域 前往領域頁面

嵌入式與韌體的其他題目

  1. 上面的程式碼正在改寫暫存器reg中多位元的設定欄位。它做了什麼?
  2. 主程式正以「reg |= mask;」(讀取、修改、寫回)操作暫存器的位元時,中斷處理常式改寫了同一暫存器的另一個位元,可能發生的問題與對策的組合,下列何者正確?
  3. 在微控制器的輸入腳位只接了開關,沒有加上上拉或下拉電阻。開關斷開時可能發生下列何種情況?
  4. 使用微控制器的GPIO(通用輸入輸出)腳位時,首先必須設定的是下列何者?
  5. 按下機械式開關時,接點細微彈跳,在短時間內反覆多次導通與斷開的現象稱為什麼?

這個領域的比較