我一直在研究什么是有效的C语法,什么不是,我尝试了1<2<1,令我惊讶的是,它是一个有效的C语法。有人知道它会做什么或代表什么吗?我试着通过测试这类表达式的取值并改变整数值来找出它,但没有发现任何模式。
1<2<1
plicqrtu1#
在C中,当使用关系运算符(如<)时,如果条件为真,则结果始终为1,如果条件为假,则结果始终为0。由于rules on operator precedence and associativity,表达式
<
1
0
相当于:
(1<2)<1
子表达式(1<2)为真,因此其计算结果为1,因此整个表达式等效于:
(1<2)
1<1
由于此表达式为false,因此其计算结果为0。因此,写入1<2<1等效于写入0。
b1payxdu2#
由于<运算符的 * 结合性 *,表达式1 < 2 < 1与(1 < 2) < 1相同。所以你要检查1 < 2的布尔结果是否小于1,1 < 2的结果是true,它将被转换成整数值1(false将变成0)。换句话说,1 < 2 < 1被转换为1 < 1,即false。
1 < 2 < 1
(1 < 2) < 1
1 < 2
true
false
1 < 1
2条答案
按热度按时间plicqrtu1#
在C中,当使用关系运算符(如
<
)时,如果条件为真,则结果始终为1
,如果条件为假,则结果始终为0
。由于rules on operator precedence and associativity,表达式
相当于:
子表达式
(1<2)
为真,因此其计算结果为1
,因此整个表达式等效于:由于此表达式为false,因此其计算结果为
0
。因此,写入
1<2<1
等效于写入0
。b1payxdu2#
由于
<
运算符的 * 结合性 *,表达式1 < 2 < 1
与(1 < 2) < 1
相同。所以你要检查
1 < 2
的布尔结果是否小于1
,1 < 2
的结果是true
,它将被转换成整数值1
(false
将变成0
)。换句话说,
1 < 2 < 1
被转换为1 < 1
,即false
。