嵌入式與韌體
以C語言只將暫存器reg的位元3設為0、其他位元不變,下列何種寫法正確?
- Areg &= ~(1 << 3);
- Breg |= ~(1 << 3);
- Creg &= (1 << 3);
查看答案與解析
正確答案:A. reg &= ~(1 << 3);
「~(1 << 3)」是只有位元3為0、其餘全為1的值。將它與AND(&)運算,位元3必定變成0,其他位元因為是與1做AND,會維持原值。設定位元的OR、清除位元的AND NOT、反轉位元的XOR(^)、檢查位元的AND,這四種是韌體操作暫存器時的基本形式。
- A. 正確。與只有位元3為0的遮罩做AND運算。
- B. 以OR運算的話,位元3以外會全部變成1。
- C. 這樣位元3以外會全部變成0。