位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 邏輯或優(yōu)化和邏輯與優(yōu)化

提問人:劉團(tuán)圓發(fā)布時間:2020-11-28

邏輯運算的優(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


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部