常用位运算技巧归纳
位運(yùn)算在嵌入式編程中比較常用,這里做一下歸納。
應(yīng)用場(chǎng)景1
假設(shè)現(xiàn)有一個(gè)32位寄存器AX,定義低位第3位控制一個(gè)連著LED的引腳P3,定義位標(biāo)志數(shù)
#define SWITCH_LED 0x0004
FAQ
- 如何將P3拉高?
拉高即置1,使用或運(yùn)算,即 AX |= SWITCH_LED。
如此運(yùn)算,第三位會(huì)被置高,而其他位不會(huì)受影響(因?yàn)闃?biāo)志數(shù)的其他位為0,AX中任何值或上0還是它本身,所以不會(huì)產(chǎn)生變化)。
- 如何將P3拉低?
拉低即清0,使用與運(yùn)算,并且被與標(biāo)志數(shù)要取反,即 AX &= ~SWITCH_LED。
如此運(yùn)算,第三位會(huì)被清零,而其他位不會(huì)受影響(因?yàn)闃?biāo)志數(shù)的其他位經(jīng)過(guò)反轉(zhuǎn)變?yōu)?,AX中任何值與上1還是它本身,所以不會(huì)產(chǎn)生變化)。
- 如何將P3反轉(zhuǎn)(實(shí)現(xiàn)LED閃爍)
反轉(zhuǎn)即取反,使用異或運(yùn)算,即AX ^= SWITCH_LED
如此運(yùn)算,第三位會(huì)被取反,而其他位不受影響(AX中任何值和1異或會(huì)被取反,和0異或保持不變)。
- 如何讀取P3的值?
直接求與運(yùn)算:AX & SWITCH_LED,即為讀第三位的比特值。
通常在判斷語(yǔ)句中:if ((AX & SWITCH_LED) == SWITCH_LED),注意要帶括號(hào)防止優(yōu)先級(jí)出問(wèn)題。
應(yīng)用場(chǎng)景2
實(shí)現(xiàn)按位加法(模2加減)。這里簡(jiǎn)單補(bǔ)充一下。
- BitA 異或 BitB = BitA 算數(shù)加?BitB,即異或運(yùn)算等于按位加法(不管進(jìn)位,進(jìn)位需要其他運(yùn)算或電路產(chǎn)生)
如:1 異或 0 = 1,0 異或 0 = 0,1 異或 1 = 0,0?異或 1 = 1
- BitA 與 BitB = BitA 算數(shù)乘 BitB,即與運(yùn)算等于按位乘法(不管進(jìn)位,進(jìn)位需要其他運(yùn)算或電路產(chǎn)生)
如 1 與 0 = 0,1 與 1 = 1,0 與 1 = 0,0? 與 0 = 0
總結(jié)
- 上一篇: 人民币对美元升值了!持有两种资产能从中获
- 下一篇: QWidget::size()和QRes