單片機c語(yǔ)言教程:運算符和表達式(位運算符)
學(xué)過(guò)匯編的朋友都知道匯編對位的處理能力是很強的,但是單片機C語(yǔ)言也能對運算對象進(jìn)行按位操作,從而使單片機C語(yǔ)言也能具有一定的對硬件直接進(jìn)行操作的能力。位運算符的作用是按位對變量進(jìn)行運算,但是并不改變參與運算的變量的值。如果要求按位改變變量的值,則要利用相應的賦值運算。還有就是位運算符是不能用來(lái)對浮點(diǎn)型數據進(jìn)行操作的。單片機c語(yǔ)言中共有6種位運算符。位運算一般的表達形式如下:
本文引用地址:http://dyxdggzs.com/article/170886.htm變量 1 位運算符 變量 2 位運算符也有優(yōu)先級,從高到低依次是:“~”(按位取反)→“”(左移) →“>>”(右
移) →“”(按位與)→“^”(按位異或)→“|”(按位或)
表 8-1 是位邏輯運算符的真值表,X 表示變量 1,Y 表示變量 2
X | Y | ~X | ~Y | XY | X|Y | X^Y |
0 | 0 | 1 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 |
表 8-1 按位取反,與,或和異或的邏輯真值表
利用以前建立起來(lái)的實(shí)驗板,我們來(lái)做個(gè)實(shí)驗驗證一下位運算是否真是不改變參與變量 的值,同時(shí)學(xué)習位運算的表達形式。程序很簡(jiǎn)單,用 P1 口做運算變量,P1.0-P1.7 對應 P1 變量的最低位到最高位,通過(guò)連接在 P1 口上的 LED 我們便能直觀(guān)看到每個(gè)位運算后變量 是否有改變或如何改變。程序如下:
#include at89x51.h>
void main(void)
{
unsigned int a;
unsigned int b;
unsigned char temp; //臨時(shí)變量
P1 = 0xAA; //點(diǎn)亮 D1,D3,D5,D7 P1 口的二進(jìn)制為 10101010,為 0 時(shí)點(diǎn)亮 LED
for (a=0;a1000;a++)
for (b=0;b1000;b++); //延時(shí)
temp = P1 0x7; //單純的寫(xiě) P1|0x7 是沒(méi)有意義的,因為沒(méi)有變量被影響,不會(huì )被編譯
//執行 P1|0x7 后結果存入temp,這個(gè)時(shí)候改變的是 temp,但 P1 不會(huì )被影響。
//這個(gè)時(shí)候 LED 沒(méi)有變化,仍然是 D1,D3,D5,D7 亮
for (a=0;a1000;a++)
for (b=0;b1000;b++); //延時(shí) P1 = 0xFF; //熄滅 LED
for (a=0;a1000;a++)
for (b=0;b1000;b++); //延時(shí)
P1 = 0xAA; //點(diǎn)亮 D1,D3,D5,D7 P1 口的二進(jìn)制為 10101010,為 0 時(shí)點(diǎn)亮 LED
for (a=0;a1000;a++)
for (b=0;b1000;b++); //延時(shí)
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論