C語言之邏輯運算子 和

2021-10-06 11:16:22 字數 1429 閱讀 2031

前言:伍**最近在刷劍指offer的面試題21的時候給||邏輯運算子坑的慘慘滴,足足浪費了我好些時間,耽誤了我西行的腳步;所以今天索性在此做乙個小總結給自己警醒一哈;

1

&&和 2

||這兩個邏輯運算子應該是做開發以來最常用的兩個運算子了,平常使用那是順手拈來,怎麼會有坑給人掉呢?可能也只能怪伍**水平不夠了,咱話不多說,開整!

首先我們從概念上重新梳理一下&&和||:當我們在表示式之間使用&&和||的時候,程式是從左到右執行這些表示式的,並且在這個過程中只要有足夠條件判斷最後結果是對是錯,程式則停止繼續執行整個表示式,直接去執行下乙個語句。看懂了嗎,光說不練假把式,直接整兩個例子:

// != 和 == 優先順序都比 = 高

// !=, == 等關係運算子優先順序比邏輯運算子高

// 所以此處我沒有加括號()

bool a =1!=

2&&1==

1&&2==

2;// a的初始化值為false

bool b =1==

1||1!=

2;// b的初始化值為true

從上面兩個例子我們知道,當初始化a的時候,第乙個表示式的結果就是false,後面的邏輯運算子又都是&&,所以我們已經知道了整個表示式的最後結果為false;所以後面兩個表示式都不會執行,程式直接執行下一條語句去了;

初始化b的時候,第乙個表示式的結果就是true,而且後面的邏輯運算子都是||,所以同上,最終的結果為true;所以後面乙個表示式也不會執行,程式直接跳過;

聽起來很簡單是吧,嗯我也是這麼覺得的,為啥說會給坑呢?那就看看:

// 掉坑題目的簡化版

bool test()

bool a = true;

a = a ||

test()

;

簡單吧,也簡單,就是一開始沒想到,因為在我刷題的時候test()是乙個必須要執行的函式,但是第乙個表示式是true,又因為邏輯運算子||,test()根本沒有執行, 所以最後出現了意想不到的結果,就掉坑了;

順便貼上解決辦法吧,總結一下:

// method 1

bool a = true, b =

test()

;a = a || b;

// method 2

bool a = true;

a =test()

|| b;

勿以惡小而為之 --《三國志·蜀志傳》

更新日誌

25/05/2020 updated version 1.0.0

邏輯運算子與,左右兩側表示式都為真時,結果為真,任意乙個為假,結果則為假 ↩︎

邏輯運算子或,左右兩側都為假時,結果為假,任意乙個為真,結果為真 ↩︎

c語言之邏輯運算子

老分不清乙個 號和倆的用法,今天專門拿出來整理整理 一 邏輯運算子 包括 1。邏輯與 2。邏輯或 3。邏輯非 邏輯運算子用於對包含關係運算子的表示式進行合併或取非 對於使用邏輯運算子的表示式,返回0表示 假 返回1表示 真 關於邏輯運算子的解釋 請注意 任何使用兩個字元做符號的運算子,兩字元之間不應...

C語言邏輯運算子 和

include include strcmp所在標頭檔案 int main void 輸入的賬號 char szinputpassword 32 輸入的密碼 獲取輸入的賬號 printf 請輸入賬號 scanf s s szinputaccount,32 獲取輸入的密碼 printf 請輸入密碼 s...

C語言邏輯運算子 和

和 是邏輯運算子,分別是邏輯與 和邏輯或 邏輯與 三種 當邏輯與左邊為false 假 則不再進行邏輯與右邊的判斷,結果為false 假 當邏輯與左邊為true 真 則進行右邊判斷,右邊為false 假 結果為false 假 當邏輯與左邊為true 真 則進行右邊判斷,右邊也為true 真 則結果為t...