C語言 邏輯或優(yōu)化和邏輯與優(yōu)化
邏輯運算的優(yōu)化是指在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下—個邏輯運算符才能求出表達(dá)式的解時,才執(zhí)行該運算符。
【例題】邏輯與優(yōu)化舉例
程序如下:
#include <stdio.h>
main()
{
int x,y,a;
x=y=z=0;
a=x++&& y++;
printf("a=%d,x=%d,y=%d\n",a,x,y);
}
程序執(zhí)行后,a、x、y的值分別是多少?
“與”運算只有當(dāng)兩個操作數(shù)為真,結(jié)果才為真。本題中,第一個操作數(shù)為x++,先將x的值取出參與“&&”運算,之后x的值自增1。取出x的值為0,所以無論第二個操作數(shù)是0還是1都不能影響整個表達(dá)式的值,那么此時就會出現(xiàn)邏輯與運算的優(yōu)化:不把所有的操作數(shù)全部計算出來,因為第一個操作數(shù)的值已經(jīng)可以決定整個表達(dá)式的值,所以,后面的操作數(shù)“y++”不再執(zhí)行,因此y的值不會改變。
最后輸出結(jié)果為:
a=0,x=1,y=0
【例題】邏輯或優(yōu)化舉例
程序如下:
#include <stdio.h>
main ()
{
int x,y,a;
x=y=a=0;
a=x--||y--;
printf ("a=%d ,x=%d,y=%d\n",a,x,y);
}
“或”運算只要有一個操作數(shù)為真,結(jié)果就為真。本題中,第一個操作數(shù)為X--,先將X的值取出參與“&&”運算,之后x的值自減1。取出x的值為1,所以無論第二個操作數(shù)是0還是1都不能影響表達(dá)式的值,那么此時就會出現(xiàn)邏輯或的優(yōu)化:第一個操作數(shù)的值已經(jīng)為1,能決定整個表達(dá)式的值,所以后面操作數(shù)“y--”不再執(zhí)行。
最后輸出結(jié)果為:
a=1,x=0,y=1
點擊加載更多評論>>