關(guān)鍵詞:&&、||、!
1. 初探邏輯運(yùn)算符
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int k = 0;
++i || ++j && ++k;
printf("i = %d\n", i);
printf("j = %d\n", j);
printf("k = %d\n", k);
return 0;
}
輸出結(jié)果:
i = 1
j = 0
k = 0
2. 邏輯運(yùn)算符分析——程序中的短路
||從左向右開(kāi)始計(jì)算:
當(dāng)遇到為真的條件時(shí)停止計(jì)算,整個(gè)表達(dá)式為真
所有條件為假時(shí)表達(dá)式才為假&&從左向右開(kāi)始計(jì)算:
當(dāng)遇到為假的條件時(shí)停止計(jì)算,整個(gè)表達(dá)式為假
所有條件為真時(shí)表達(dá)式才為真-
邏輯表達(dá)式中,
&&比||具有更高的優(yōu)先級(jí)
在&&和||混合運(yùn)算時(shí),整個(gè)表達(dá)式被看作||表達(dá)式(因?yàn)?code>||的優(yōu)先級(jí)低于&&,因此最后運(yùn)算||),編譯器從左向右開(kāi)始計(jì)算&&表達(dá)式,當(dāng)某個(gè)&&表達(dá)式的值為真時(shí),停止計(jì)算,整個(gè)表達(dá)式值為真。
#include <stdio.h>
int g = 0;
int f()
{
printf("In f()...\n");
return g++;
}
int main()
{
if( g || f() && f() )
{
printf("In if statement: %d\n", g);
}
printf("In main(): %d\n", g);
return 0;
}
輸出結(jié)果:
In f()...
In main(): 1
3. !邏輯非分析
C語(yǔ)言中的邏輯非!只認(rèn)識(shí)0,只知道見(jiàn)了0就返回1.因此當(dāng)其遇見(jiàn)的值不是0時(shí),其結(jié)果為0.
4. 邏輯非運(yùn)算符的使用
#include <stdio.h>
int main()
{
printf("%d\n", !0);
printf("%d\n", !1);
printf("%d\n", !100);
printf("%d\n", !-1000);
return 0;
}
輸出結(jié)果:
1
0
0
0
5. 小結(jié)
- 程序中的邏輯表達(dá)式遵循短路規(guī)則
- 在
&&與||混合運(yùn)算時(shí):
整個(gè)表達(dá)式被看作||表達(dá)式
從左向右先計(jì)算&&表達(dá)式
最后計(jì)算||表達(dá)式 - 邏輯非
!運(yùn)算符只認(rèn)得0:遇見(jiàn)0返回1,否則統(tǒng)統(tǒng)返回0
聲明:此文章為本人在學(xué)習(xí)狄泰軟件學(xué)院《C語(yǔ)言深度解析》所做的筆記,文章中包含狄泰軟件資料內(nèi)容一切版權(quán)歸狄泰軟件所有!
