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