運算子 | 功能 | 範例 |
---|---|---|
! | 非 | !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://pydoing.blogspot.com/ 檔名:logicnot.c 功能:示範邏輯運算子「非」的使用 作者:張凱慶 時間:西元2010年4月 */
編譯後執行,結果如下
由於一開始變數 valid 就被設定為 0 ,因此第 7 行
if (!valid) {
為真,所以第七行底下的程式區塊就會執行,印出字串後就會將 valid 就被設定為 1 ,所以第 12 行
if (!valid) {
為假,底下的程式區塊就不會被執行。
以下例子示範邏輯運算子「且」的使用
#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://pydoing.blogspot.com/ 檔名:logicand.c 功能:示範邏輯運算子「且」的使用 作者:張凱慶 時間:西元2010年4月 */
編譯後執行,結果如下
由於一開始變數 valid 設定為 0 , a 設定為 2 ,所以第 8 行
if (a > 1 && !valid) {
a 大於 1 且非 0 為真,所以底下的程式區塊會執行,變數 valid 會重新設定為 1 。到第 13 行
if (a < 3 && !valid) {
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://pydoing.blogspot.com/ 檔名:logicor.c 功能:示範邏輯運算子「或」的使用 作者:張凱慶 時間:西元2010年4月 */
編譯後執行,結果如下
一開始變數 valid 設定為 0 , a 設定為 2 ,所以第 8 行
if (a > 1 || !valid) {
a 大於 1 為真,雖然後面還有條件,但由於是用或運算子連接,或運算式中測試到第一個為真的條件,就會停止繼續的條件測試,直接執行底下的程式區塊,所以同樣的第 13 行
if (a < 3 || !valid) {
a 小於 3 為真,底下的字串就會直接被列印,程式不會繼續測試變數 valid 的值。
且及非運算子都具有這樣的特性,許多 C 程式都利用此特性增加程式的執行效率。
2 則留言:
請問!
以下例子示範邏輯運算子「非」的使用
#include
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://pydoing.blogspot.com/
檔名:logicnot.c
功能:示範邏輯運算子「非」的使用
作者:張凱慶
時間:西元2010年4月 */
這部份程試碼是不是錯了
列印出來的應該是
valid = 1
這樣的結果吧!
還是我誤會了!感謝您
任何完整範例都可編譯執行,對錯請以編譯執行的結果為準 xd
此例的 valid 初值設為 0
亦即是邏輯上的「假」
因此 !valid 的運算結果會為「真」
於是先印出
valid = 0
然後將 valid 設為 1
導致再下來 !valid 的運算結果為「假」
既然是「假」,下面大括弧的區塊就不會被執行囉
張貼留言