while ( (i=t-i%10 ? i/10 : !printf("%d\n",j)) || (i=++j<0?-j:j)<101 );
我在Codegolf上遇到了这个问题
请解释?
and的用法,:
为什么while循环后没有任何语句?如为什么;
在括号后有一个。
请解释的使用
?
和:
那就是条件运算符。a ? b : c
计算a
并将其转换为布尔值。然后,它会评估b
其为真或c
为假,并且表达式的整体值是评估b
或的结果c
。
所以第一个子表达式:
t-i%10
给i
。该表达式的结果是的新值i
。i
不为零,则表达式的结果为i/10
j
,表达式的结果为零(因为printf
返回的打印字符计数为非零,该计数!
转换为零)。然后||
,仅当第一个表达式的结果为零时才对第二个子表达式进行评估。我让你弄清楚它的作用。
为什么在while循环之后没有任何语句?
有一个空语句,;
因此循环体不执行任何操作。所有动作都发生在条件表达式的副作用中。当代码的目的是使读者感到困惑时,这是一种常见的技术。但是在编写您关心的任何人可能需要维护的代码时,请不要执行此类操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句