嵌入式與韌體
以C語言只將暫存器reg的位元3設為1、其他位元不變,下列何種寫法正確?
- Areg |= (1 << 3);
- Breg = (1 << 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。