y - = m <3是什么意思?

The*_*tor 52 c

在查看一些示例C代码时,我遇到了这个问题:

y -= m < 3;
Run Code Online (Sandbox Code Playgroud)

这是做什么的?它有点浓缩for循环或什么?据我所知,谷歌是不可能的.

Wei*_*Shi 75

m < 31或者0,取决于真值.

所以y=y-1,当m<3true,或y=y-0m>=3

  • C没有布尔值,因此布尔表达式求值为整数.你不能在java中做同样的事情因为有boolean和Boolean. (2认同)

Jas*_*ien 25

如果按每个操作的优先顺序对其进行细分,则会得到:

y = (y - (m < 3));
Run Code Online (Sandbox Code Playgroud)

m < 3得到评估,并返回一个布尔结果10,所以表达式可以简化为

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条款.

  • 不,这样做的目的是炫耀和混淆未来的维护程序员. (3认同)

Ste*_*sop 14

我的意思是if (m < 3) { y -=1; },(m < 3)如果m小于3则为1,否则为0.

该代码出现在一些古老的参考实现中,与闰年或复活节有关,或者可能两者:1月和2月的前两个月是特殊的,因为它们发生在闰日之前.除非你真的喜欢它的外观,否则没有任何借口可以编写这样的代码.大多数人没有.


Att*_*lus 10

m < 3如果m小于3,则评估为1.因此,在这种情况下,y减1.因此,if语句避免了.