佚名 發表於 2009-04-15 09:37:37
關係運算符,同樣我們也並不陌生。單片機C語言中有六種關係運算符,這些東西同樣是在我們小時候學算術時就已經學習過了的:
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 等於
或者你是個非 C語言 程式設計師,那麼對前四個一定是再熟悉不過的了。而「==」在 VB 或 PASCAL 等中是用「=」,「!=」則是用「not 」。
小學時的數學課就教授過運算符是有優先級別的,計算機的語言也不過是人類語言的一種擴展,這裡的運算符同樣有著優先級別。前四個具有相同的優先級,後兩個也具有相同的優先級,但是前四個的優先級要高於後2個的。
當兩個表達式用關係運算符連接起來時,這個時候就是關係表達式。關係表達式通常是用來判別某個條件是否滿足。要注意的是用關係運算符的運算結果只有 0 和 1 兩種,也就是邏輯的真與假,當指定的條件滿足時結果為 1,不滿足時結果為 0。
表達式 1 關係運算符 表達式 2 如:I<J,I==J,(I=4)>(J=3),J+I>J
藉助我們在上一課做好的電路和學習了的相關操作。我們來做一個關係運算符相關的實例程序。為了增加學習的趣味性和生動性,不妨我們來假設在做一個會做算術的機器人,當然真正會思考對話的機器,我想我是做不出來的了,這裡的程序只是用來學習關係運算符的基本應用。
#include
#include
void main(void)
{
int x,y;
SCON = 0x50; //串行口方式 1,允許接收 TMOD = 0x20; //定時器 1 定時方式 2
TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;
TI = 1;
TR1 = 1; //啟動定時器
while(1)
{
printf("您好!我叫 Robot!我是一個會做算術的機器人!\n"); //顯示
printf("請您輸入兩個 int,X 和 Y\n"); //顯示
scanf("%d%d",&x,&y); //輸入
if (x < y)
printf("X
else //當 X 不小於 Y 時再作判斷
{
if (x == y)
printf("X=Y\n"); //當 X 等於 Y 時
else
printf("X>Y\n"); //當 X 大於 Y 時
}
}
}
要注意的是,在連接 PC 串行口調試時。發送數字時,發送完一個數字後還要發送一個回
車符,以使 scanf 函數確認有數據輸入。
邏輯運算符 關係運算符所能反映的是兩個表達式之間的大小等於關係,那邏輯運算符則是用於求條
件式的邏輯值,用邏輯運算符將關係表達式或邏輯量連接起來就是邏輯表達式了。也許你會 對為什麼「邏輯運算符將關係表達式連接起來就是邏輯表達式了」這一個描述有疑惑的地方。 其實之前說過「要注意的是用關係運算符的運算結果只有 0 和 1 兩種,也就是邏輯的真與假」, 換句話說也就是邏輯量,而邏輯運算符就用於對邏輯量運算的表達。邏輯表達式的一般形式 為:
邏輯與:條件式 1 && 條件式 2 邏輯或:條件式 1 || 條件式 2 邏輯非: ! 條件式 2
圖 7-1 演示結果
邏輯與,說白了就是當條件式 1「與」條件式 2 都為真時結果為真(非 0 值),不然為 假(0 值)。也就是說運算會先對條件式 1 進行判斷,如果為真(非 0 值),則繼續對條件式
2 進行判斷,當結果為真時,邏輯運算的結果為真(值為 1),如果結果不為真時,邏輯運算 的結果為假(0 值)。如果在判斷條件式 1 時就不為真的話,就不用再判斷條件式 2 了,而 直接給出運算結果為假。
邏輯或,是指只要二個運算條件中有一個為真時,運算結果就為真,只有當條件式都不 為真時,邏輯運算結果才為假。
邏輯非則是把邏輯運算結果值取反,也就是說如果兩個條件式的運算值為真,進行邏輯 非運算後則結果變為假,條件式運算值為假時最後邏輯結果為真。
同樣邏輯運算符也有優先級別,!(邏輯非)→&&(邏輯與)→||(邏輯或),邏輯非的 優先值最高。
如有 !True || False && True
按邏輯運算的優先級別來分析則得到(True 代表真,False 代表假)
!True ||
False
&&
True
False ||
False
&&
True
//!Ture 先運算得 False
False ||
False
//False && True 運算得 False
False
//最終 False || False 得 False
下面我們來用程序語言去有表達,如下:
#include
#include
void main(void)
{
unsigned char True = 1; //定義
unsigned char False = 0;
SCON = 0x50; //串行口方式 1,允許接收 TMOD = 0x20; //定時器 1 定時方式 2
TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;
TI = 1;
TR1 = 1; //啟動定時器
if (!True || False && True)
printf("True\n"); //當結果為真時
else
}
printf("False\n"); //結果為假時
大家能使用以往學習的方法用 keil 或燒到片子上用串行口調試。能更改「!True || False
&& True」這個條件式,以實驗不一樣算法組合來掌握邏輯運算符的使用方法。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴