C 速查手冊
3.4 邏輯運算子
C 語言的邏輯運算子 (operator) 包含邏輯非,施用於單一運算元,其他邏輯且、或都需要兩個運算元 (operand) ,如下列表
運算子 | 功能 | 範例 |
---|---|---|
! | 非 | !a |
&& | 且 | a && b |
|| | 或 | a || b |
以下例子示範邏輯運算子「非」的使用
#include <stdio.h>
int main(void)
{
int valid = 0;
if (!valid) {
printf("valid = 0\n");
valid = 1;
}
if (!valid) {
printf("valid = 1\n");
valid = 0;
}
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:logicnot.c
功能:示範邏輯運算子「非」的使用
作者:張凱慶 */
編譯後執行,結果如下
$ gcc logicnot.c |
$ a.out |
valid = 0 |
$ |
由於一開始變數 valid 就被設定為 0 ,因此第一個 if 陳述
if (!valid) {
printf("valid = 0\n");
valid = 1;
}
為真,所以底下的程式區塊就會執行,印出字串後就會將 valid 就被設定為 1 ,然後第二個 if 陳述
if (!valid) {
printf("valid = 1\n");
valid = 0;
}
為假,底下的程式區塊就不會被執行。
以下例子示範邏輯運算子「且」的使用
#include <stdio.h>
int main(void)
{
int valid = 0;
int a = 2;
if (a > 1 && !valid) {
printf("valid = 0\n");
valid = 1;
}
if (a < 3 && !valid) {
printf("valid = 1\n");
valid = 0;
}
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:logicand.c
功能:示範邏輯運算子「且」的使用
作者:張凱慶 */
編譯後執行,結果如下
$ gcc logicand.c |
$ a.out |
valid = 0 |
$ |
由於一開始變數 valid 設定為 0 , a 設定為 2 ,所以第一個 if 陳述
if (a > 1 && !valid) {
printf("valid = 0\n");
valid = 1;
}
a 大於 1 且非 0 為真,所以底下的程式區塊會執行,變數 valid 會重新設定為 1 。到第二個 if 陳述
if (a < 3 && !valid) {
printf("valid = 1\n");
valid = 0;
}
a 小於 3 仍為真,但後頭非 1 為假,所以整個運算式為假,底下的程式區塊就不會被執行。
以下例子示範邏輯運算子「或」的使用
#include <stdio.h>
int main(void)
{
int valid = 0;
int a = 2;
if (a > 1 || !valid) {
printf("valid = 0\n");
valid = 1;
}
if (a < 3 || !valid) {
printf("valid = 1\n");
valid = 0;
}
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:logicor.c
功能:示範邏輯運算子「或」的使用
作者:張凱慶 */
編譯後執行,結果如下
$ gcc logicor.c |
$ a.out |
valid = 0 |
valid = 1 |
$ |
一開始變數 valid 設定為 0 , a 設定為 2 ,所以第一個 if 陳述
if (a > 1 || !valid) {
printf("valid = 0\n");
valid = 1;
}
a 大於 1 為真,雖然後面還有條件,但由於是用或運算子連接,或運算式中測試到第一個為真的條件,就會停止繼續的條件測試,直接執行底下的程式區塊,所以同樣的第二個 if 陳述
if (a < 3 || !valid) {
printf("valid = 1\n");
valid = 0;
}
a 小於 3 為真,底下的字串就會直接被列印,程式不會繼續測試變數 valid 的值。
且及非運算子都具有這樣的特性,許多 C 程式都利用此特性增加程式的執行效率。