++i || ++j && ++k;
會輸出什麼呢?
例項分析: 初探邏輯運算子
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int k = 0;
++i || ++j && ++k;
printf("i = %d
", i);
printf("j = %d
", j);
printf("k = %d
", k);
}
輸出:
i = 1
j = 0
k = 0
邏輯運算子分析
程式中的短路
|| 從左向右開始計算 :
- 當遇到為真的條件時停止計算,整個表示式為真
- 所有條件為假時表示式才為假
&& 從左向右開始計算
- 當遇到為假的條件時停止計算,整個表示式為假
- 所有條件為真時表示式為真
- 邏輯表示式中, && 比 || 具有更高的優先順序
++ i || ++j && ++k; ==>
(++i) || (++j && ++k); ==>
(true && ++i) || (++j && ++k);
在 && 和 || 混合運算時,整個表示式被看作 || 表示式,編譯器從左向右開始計算 && 表示式,當某個 && 表示式的值為真時,停止計算,整個表示式的值為真。
例項分析: 程式中的短路規則
#include <stdio.h>
int g = 0;
int f()
{
printf("In f()...
");
return g++;
}
int main()
{
if( g || f() && f() )
{
printf("In if statement: %d
", g);
}
printf("In main(): %d
", g);
return 0;
}
輸出:
In f()...
In main(): 1
分析:
g || f() && f() ==> (true && g) || (f() && f()) ==> 0 || (f() && f()) ==> 0 || 0 ==> 0
- “!” 是什麼?
#include <stdio.h>
int main()
{
printf("%d
", !0);
printf("%d
", !1);
printf("%d
", !100);
printf("%d
", !-1000);
return 0;
}
輸出:
1
0
0
0
C 語言中邏輯非 “!” 只認得 0,只知道見了 0 就返回 1。因此當碰見的值不是 0 時,其結果0。
- 真 : ! 0
- 假 : 0
小結
- 程式中的邏輯表示式遵從短路規則
在 && 與 || 混合運算時:
- 整個表示式被看作 || 表示式
- 從左向右先計算 && 表示式
- 最後計算 || 表示式
邏輯非 ! 運算子只認得 0
- 碰見 0 返回 1 ,否則統統返回 0
以上內容參考狄泰軟體學院系列課程,請大家保護原創!