1
#include<stdio.h>
main()
{
 (5%5)?1:0&puts("fizz");

}

fizz上面的代码按预期打印。但我不明白按位&操作数如何与 0&puts("fizz"). 它背后的工作是什么?表达式的价值是什么?

有人请解释

4

6 回答 6

4
  1. (5%5)被评估0为假。
  2. 然后整个语句计算为0&puts("fizz");
  3. 为了评估它,该值0与返回值进行按位与运算,其返回值puts只能通过执行打印 fizz 的函数来找到。
  4. 结果(将始终为0)被丢弃。
于 2013-09-03T10:40:17.637 回答
3

表达方式:

(5 % 5)?    1  : 0 & puts("fizz"); 
   ^              ^      
   0 == False     executes 

放置打印:"fizz"。puts 函数的返回值是按位 & with0并且结果(应该是0)被丢弃。

所以你的表达等同 (5 % 5)? 1 : puts("fizz");于效果。

于 2013-09-03T10:39:46.670 回答
2

嗯 ...5 % 5为 0(假),因此该?:部分继续计算冒号右侧的表达式。

这意味着用 的返回值对 0 进行按位与:运算puts(),因此显然必须调用该函数。

于 2013-09-03T10:38:51.450 回答
0

如果成功完成,该puts()函数将返回一个非负数。然后将这个非负数与零进行与运算。

于 2013-09-03T10:41:26.833 回答
0

&强制执行puts()

于 2013-09-03T10:54:12.457 回答
0

puts()成功时返回一个非负数。if (5%5)将返回假。因此, from 的返回值puts()是按位&0.

于 2013-09-03T10:43:09.523 回答