#include<stdio.h>
main()
{
(5%5)?1:0&puts("fizz");
}
fizz
上面的代码按预期打印。但我不明白按位&
操作数如何与 0&puts("fizz")
. 它背后的工作是什么?表达式的价值是什么?
有人请解释
#include<stdio.h>
main()
{
(5%5)?1:0&puts("fizz");
}
fizz
上面的代码按预期打印。但我不明白按位&
操作数如何与 0&puts("fizz")
. 它背后的工作是什么?表达式的价值是什么?
有人请解释
(5%5)
被评估0
为假。0&puts("fizz");
0
与返回值进行按位与运算,其返回值puts
只能通过执行打印 fizz 的函数来找到。0
)被丢弃。表达方式:
(5 % 5)? 1 : 0 & puts("fizz");
^ ^
0 == False executes
放置打印:"fizz"
。puts 函数的返回值是按位 & with0
并且结果(应该是0
)被丢弃。
所以你的表达等同 (5 % 5)? 1 : puts("fizz");
于效果。
嗯 ...5 % 5
为 0(假),因此该?:
部分继续计算冒号右侧的表达式。
这意味着用 的返回值对 0 进行按位与:运算puts()
,因此显然必须调用该函数。
如果成功完成,该puts()
函数将返回一个非负数。然后将这个非负数与零进行与运算。
&
强制执行puts()
。
puts()
成功时返回一个非负数。if (5%5)
将返回假。因此, from 的返回值puts()
是按位&
与0
.