關系運算符
對于關系運算符,同樣我們也并不陌生。C中有六種關系運算符,這些家伙同樣是在小時候學算術時學習過的:
?。?大于
?。?小于
?。荆?大于等于
<= 小于等于
?。剑?等于
?。。?等于
或者你是個非C程序員,那么對前四個一定是再熟悉不過的了。而"=="在VB或PASCAL等中是用"=","!="則是用"not "。由于工作關系我自己要使用好幾種的程序語言,所以有時也會頭暈搞錯。老了咯?。篜
小學時的數(shù)學課就教授過運算符是有優(yōu)先級別的,計算機的語言也不過是人類語言的一種擴展,這里的運算符同樣有著優(yōu)先級別。前四個具有相同的優(yōu)先級,后兩個也具有相同的優(yōu)先級,但是前四個的優(yōu)先級要高于后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.0592MHz1200波特率
TL1 = 0xE8;
TI = 1;
TR1 = 1; //啟動定時器
while(1)
{
printf("您好!我叫Robot!我是一個會做算術的機器人!n"); //顯示
printf("請您輸入兩個int,X 和 Yn"); //顯示
sCANf("%d%d",&x,&y); //輸入
if (x < y)
printf("Xelse //當X不小于Y時再作判斷
{
if (x == y)
printf("X=Yn"); //當X等于Y時
else
printf("X>Yn"); //當X大于Y時
}
}
}
要注意的是,在連接PC串口調試時。發(fā)送數(shù)字時,發(fā)送完一個數(shù)字后還要發(fā)送一個回車符,以使scanf函數(shù)確認有數(shù)據(jù)輸入。Printf,scanf函數(shù)的具體用法,將和其它相關函數(shù)集中出現(xiàn)在www.cdle.net的C51函數(shù)詳解中,敬請大家留意。
邏輯運算符
關系運算符所能反映的是兩個表達式之間的大小等于關系,那邏輯運算符則是用于求條件式的邏輯值,用邏輯運算符將關系表達式或邏輯量連接起來就是邏輯表達式了。也許你會對為什?quot;邏輯運算符將關系表達式連接起來就是邏輯表達式了"這一個描述有疑惑的地方。其實之前說過"要注意的是用關系運算符的運算結果只有0和1兩種,也就是邏輯的真與假",換句話說也就是邏輯量,而邏輯運算符就用于對邏輯量運算的表達。至于復雜的邏輯量的運算法則我也知之甚少,如要了解的朋友可以參看數(shù)字電路的教科書、邏輯學或數(shù)學書,而之里只能說說簡單常用的幾種。邏輯表達式的一般形式為:
邏輯與:條件式1 && 條件式2
邏輯或:條件式1 || 條件式2
邏輯非: ! 條件式2
圖7-5 演示結果
邏輯與,說白了就是當條件式1"與"條件式2都為真時結果為真(非0值),否則為假(0值)。也就是說運算會先對條件式1進行判斷,如果為真(非0值),則繼續(xù)對條件式2進行判斷,當結果為真時,邏輯運算的結果為真(值為1),如果結果不為真時,邏輯運算的結果為假(0值)。如果在判斷條件式1時就不為真的話,就不用再判斷條件式2了,而直接給出運算結果為假。
邏輯或,是指只要二個運算條件中有一個為真時,運算結果就為真,只有當條件式都不為真時,邏輯運算結果才為假。
邏輯非則是把邏輯運算結果值取反,也就是說如果兩個條件式的運算值為真,進行邏輯非運算后則結果變?yōu)榧伲瑮l件式運算值為假時最后邏輯結果為真。
同樣邏輯運算符也有優(yōu)先級別,!(邏輯非)→&&(邏輯與)→||(邏輯或),邏輯非的優(yōu)先值最高。
如有 !True || False && True
按邏輯運算的優(yōu)先級別來分析則得到(True代表真,F(xiàn)alse代表假)
!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("Truen"); //當結果為真時
else
printf("Falsen"); //結果為假時
}
大家可以使用以往學習的方法用keil或燒到片子上用串口調試??梢愿?!True || False && True"這個條件式,以實驗不同算法組合來掌握邏輯運算符的使用方法。