具有两个关系运算符的单个变量如何在内部工作

时间:2018-11-05 16:17:53

标签: c++ logical-operators boolean-expression relational-operators

如果需要组合布尔表达式,我们通常使用逻辑运算符。我想知道表达式是否不使用逻辑运算符。

int x=101;
if(90<=x<=100)
  cout<<'A';  

此代码仍在控制台上显示“ A”。您能帮我理解如何对布尔表达式求值,以及对布尔表达式求值的方式。

3 个答案:

答案 0 :(得分:7)

由于运算符具有相同的优先级,因此表达式从左到右求值:

if( (90 <= x) <= 100 )

if( (90 <= 101) <= 100 ) // substitute x's value

if( true <= 100 ) // evaluate the first <= operator

if( 1 <= 100 ) // implicit integer promotion for true to int

if( true ) // evaluate the second <= operator

要获得所需的比较,可以使用以下条件:

if( 90 <= x && x <= 100)

答案 1 :(得分:2)

这是常见的错误来源,因为它看起来正确,并且在语法上是正确的。

int x=101;
if(90<=x<=100)

这等效于

if (  (90 <= x) <= 100) 

if ( true <= 100 )

并且由于true可以转换为1,因此

if ( true ) 

答案 2 :(得分:0)

此表达式大致等于

int x=101;
bool b1 = 90 <= x; // true
bool b2 = int(b1) <= 100; // 1 <= 100 // true
if(b2)
    cout<<'A';

所以这是真实的结果。