嵌入式與韌體

以C語言只將暫存器reg的位元3設為1、其他位元不變,下列何種寫法正確?

  1. Areg |= (1 << 3);
  2. Breg = (1 << 3);
  3. Creg &= (1 << 3);
查看答案與解析

正確答案:A. reg |= (1 << 3);

「1 << 3」以二進位表示為00001000,是只有位元3為1的值(遮罩)。將它與暫存器的值做OR(|)運算,位元3必定變成1,其他位元則維持原值。若使用指定(=),連其他位元也會被0覆寫,破壞週邊電路的其他設定。位元編號以最低位元為0開始計算。

  • A. 正確。以OR僅將該位元設為1。
  • B. 其他位元會全部變成0。
  • C. 以AND運算的話,位元3以外會全部變成0。
練習這個領域 前往領域頁面

嵌入式與韌體的其他題目

  1. 以C語言只將暫存器reg的位元3設為0、其他位元不變,下列何種寫法正確?
  2. 想讓連接LED的輸出腳位的位元,每執行一次就在亮與滅之間切換。下列何種C語言寫法正確?
  3. 檢查輸入用暫存器in的位元5是否為1,下列何種C語言條件正確?
  4. 上面的程式碼正在改寫暫存器reg中多位元的設定欄位。它做了什麼?
  5. 主程式正以「reg |= mask;」(讀取、修改、寫回)操作暫存器的位元時,中斷處理常式改寫了同一暫存器的另一個位元,可能發生的問題與對策的組合,下列何者正確?

這個領域的比較