[英]Conditional operators error
我很難理解為什么以下代碼部分返回x而不是b。
#include <iostream>
using namespace std;
int main()
{
int x = 12;
int a = 1;
int b = 0;
cout << "answer: " << (x < a && 1 ? a : (x > b && 0 ? b : x)) << endl;
return 0;
}
我的工作是:
x不低於[邏輯和] 1,移至第二組括號。
x IS大於0 [對數和] 0,因此結果應為'b'。
(由於兩個語句都等於true,因此Result_if_true語句不應該作為輸出嗎?)
x > b && 0
並不意味着“x大於b和0大”。
相反,它的意思是:“ x大於b,0是真實的語句”。 &&
運算符是連接兩個語句的邏輯AND。 您不能以自然語言使用“和”一詞的寬松方式來使用它。
(x < a && 1 ? a : (x > b && 0 ? b : x))
被解析為
((x < a) && 1) ? a : (((x > b) && 0) ? b : x)
這與
(false && true) ? a : ((true && false) ? b : x)
即
false ? a : (false ? b : x)
即
x
在這個表達中
(x < a && 1 ? a : (x > b && 0 ? b : x))
首先有評估條件
x < a && 1
因為x不小於a,所以它等於false
。
因此,將要計算的下一個表達式是
(x > b && 0 ? b : x)
在這種表達條件下
x > b && 0
顯然等於false
所以整個表達式的值就是子表達式的值
x
並會輸出
answer: 12
您的邏輯錯誤是該表達
x > b && 0
不等於
( x > b ) && ( x > 0 )
它等效於
( x > b ) && ( 0 )
作為表達
( 0 )
等於false
然后
( x > b ) && ( 0 )
等於false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.