位運(yùn)算是指按二進(jìn)制位進(jìn)行的運(yùn)算。在單片機(jī)中位運(yùn)算通常用于I/O端口的輸入輸出控制和邏輯判斷。
C語(yǔ)言提供的位運(yùn)算符有:
運(yùn)算符 | 含義 | 功能 |
& | 按位與 | 如果兩個(gè)相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果值為1;否則為0。 |
| | 按位或 | 兩個(gè)相應(yīng)的二進(jìn)制位中只要有一個(gè)為1,該位的結(jié)果值為1。 |
∧ | 按位異或 | 若參加運(yùn)算的兩個(gè)二進(jìn)制位同號(hào)則結(jié)果為0(假)異號(hào)則結(jié)果為1(真) |
~ | 取反 | ~是一個(gè)單目(元)運(yùn)算符,用來(lái)對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即將0變1,將1變0。 |
<< | 左移 | 左移運(yùn)算符是用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部左移N位,右補(bǔ)0。 |
>> | 右移 | 表示將a的各二進(jìn)制位右移N位,移到右端的低位被舍棄,對(duì)無(wú)符號(hào)數(shù),高位補(bǔ)0。 |
與邏輯:
將PA口的第0位清0(即最低位輸出低0v電平),其余位保持不變: PORTA口應(yīng)同‘11111110’進(jìn)行與運(yùn)算
二進(jìn)制:11111110 的十六進(jìn)制為:0xFE,C語(yǔ)言代碼:PORTA=PORTA&0xFE;一般采用c語(yǔ)言的“&=‘運(yùn)算符,通常寫(xiě)成
PORTA&=0xFE; 執(zhí)行此語(yǔ)句后,PORTA口的第0位將輸出低電平。
或邏輯:
將PA口的第7位置1(即最高位輸出高電平)其余為保持不變,PORTA應(yīng)與‘10000000’進(jìn)行或運(yùn)算
即c語(yǔ)言:PORTA=PORTA|0x80 ;采用或賦值運(yùn)算符,通常寫(xiě)成 PROTA|=0x80 ; 二進(jìn)制‘10000000’的十六進(jìn)制是0x80;
非邏輯:
c語(yǔ)言:PORTA~=0x0F;//將0x0F=‘00001111‘取反后 '11110000‘=0xF0 賦值給PORTA,通常和其他邏輯運(yùn)算符一起使用
異或邏輯:
將PA口的第7位翻轉(zhuǎn),PORTA^=0x80,即執(zhí)行此語(yǔ)句一次,PORTA口的第7位狀態(tài)變化一次,由0變1,或由1變0,可以周期性的控制一個(gè)燈的亮滅。
移位操作:
判斷PA口的第7位是否為0,c語(yǔ)言 if (PINA&(1<<7)==0) 1<<7 結(jié)果為0x80,也可寫(xiě)為 if (PINA&0x80)==0)