我几天前遇到过这个谜语
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。
有人对此有解释吗?提前谢谢
答案 0 :(得分:2)
表达式1 < 1 < 1
被解析为
(1 < 1) < 1
此处1 < 1
为false
,转换为0
,产生
(0) < 1
这是真的。
答案 1 :(得分:2)
1 < 1 < 1
被解析为(1 < 1) < 1
。那么,从左边开始......
1 < 1
是0
(false)
0 < 1
是1
(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。