1.&&邏輯運算符的坑
int x=0,y=0,z=0;
z = (x==1) && (y=2);
printf("%d",y);//y=0;
今天遇到了同學問的問題,為什么y輸出為0.
我第一時間也記不得,工作中一般不會寫這種代碼,但是卻不能忽略。
通過查閱資料,也很快明了。
在 C/C++ 中,邏輯運算符 && 表示邏輯與運算。當 && 運算符的左邊表達式的值為假(即 0),那么右邊的表達式不會被計算,因為無論右邊的表達式是真還是假,整個邏輯與表達式的結果都為假。這種情況下,右邊的表達式被稱為“短路”(short-circuit),因為它沒有被完全計算。
例如,考慮以下代碼:
int a = 5;
int b = 10;
if (a == 5 && b++ == 10) {// do something
}
在這個代碼中,a == 5 的值為真,但是 b++ == 10 的值為假,因為 b++ 的結果是 10,但是它與 10 不相等。因此,整個邏輯與表達式的結果為假,右邊的表達式 b++ == 10 沒有被計算,b 的值仍然是 10。
另外,邏輯或運算符 || 也有類似的短路行為。當 || 運算符的左邊表達式的值為真時,右邊的表達式不會被計算,因為無論右邊的表達式是真還是假,整個邏輯或表達式的結果都為真。
同學們,理解了嗎?點贊了嗎?