为什么(1< 1< 1)在C ++中返回true?

时间:2015-08-15 07:54:37

标签: c++

我几天前遇到过这个谜语

main ()
{
    cout << (1 < 1 < 1  ? "true" : "false") << endl;
}

我无法弄清楚为什么在地球上它会返回真实。我原以为是假的。

更多:

cout << (2 < 2 < 2  ? "true" : "false") << endl;    // returns true
cout << (0 < 0 < 0  ? "true" : "false") << endl;    // returns false
cout << (-1 < -1 < -1  ? "true" : "false") << endl; // returns false
cout << (-2 < -2 < -2  ? "true" : "false") << endl; // returns false

对于严格大于0的值,它似乎返回true,否则返回false。

有人对此有解释吗?提前谢谢

4 个答案:

答案 0 :(得分:2)

表达式1 < 1 < 1被解析为

(1 < 1) < 1

此处1 < 1false,转换为0,产生

(0) < 1

这是真的。

答案 1 :(得分:2)

1 < 1 < 1被解析为(1 < 1) < 1。那么,从左边开始......

1 < 10(false)

0 < 11(true)

1 ? "true" : "false""true"

等等。

当然,真正的课程就是这样的代码在现实世界的程序中没有位置。你应该争取可读性......

答案 2 :(得分:1)

首先考虑到根据积分转换

  

如果源类型为bool,则值false将转换为零和   值true将转换为一个。

关系运算符&lt;从左到右分组。因此这个表达

1 < 1 < 1 

可以写成

( 1 < 1 ) < 1

Subexpression

1 < 1

收益false

因此在评估之后,表达式看起来像

false < 1

转换为

0 < 1

结果产生true

例如这个表达式

0 < 0 < 0

相当于

( 0 < 0 ) < 0

然后

0 < 0

以与前面示例相同的方式生成false。你得到了

false < 0

反过来转换为

0 < 0

再次产生false

如果使用负整数值,例如

-1 < -1 < -1

然后

-1 < -1

收益false。在这个表达式中

false < -1

false转换为0

0 < -1

然后你又来了false

答案 3 :(得分:0)

  • (1 <1 <1)将返回true,因为,

    内部编译器像这样((1&lt; 1)&lt; 1)进行分组。

    所以,首先它会执行,

    function reach(x) {
           var p=document.createElement('div');
           var text = document.createTextNode("a really long string like pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp");
           p.appendChild(text);
           //p.setAttribute("class","limit");
           document.getElementById('container').appendChild(p);
       }
    

    以上条件变为假,因此它将设置为0.

  • 所以新条件是(0 <1)

    (1<1)
    

    这将成为现实,因此它将返回true。