在查看一些示例C代码时,我遇到了这个问题:
y -= m < 3;
Run Code Online (Sandbox Code Playgroud)
这是做什么的?它有点浓缩for循环或什么?据我所知,谷歌是不可能的.
Wei*_*Shi 75
m < 3是1或者0,取决于真值.
所以y=y-1,当m<3为true,或y=y-0当m>=3
Jas*_*ien 25
如果按每个操作的优先顺序对其进行细分,则会得到:
y = (y - (m < 3));
Run Code Online (Sandbox Code Playgroud)
m < 3得到评估,并返回一个布尔结果1或0,所以表达式可以简化为
y = y - 1; // if m < 3 is true
Run Code Online (Sandbox Code Playgroud)
要么
y = y - 0; // if m < 3 is false
Run Code Online (Sandbox Code Playgroud)
这样做的目的是避免使用if条款.
Ste*_*sop 14
我的意思是if (m < 3) { y -=1; },(m < 3)如果m小于3则为1,否则为0.
该代码出现在一些古老的参考实现中,与闰年或复活节有关,或者可能两者:1月和2月的前两个月是特殊的,因为它们发生在闰日之前.除非你真的喜欢它的外观,否则没有任何借口可以编写这样的代码.大多数人没有.