计划:
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
输出:
5 57 73
我是C的新手,我可以猜到5 57 7来自哪里,但不知道3来自哪里。有人可以解释输出吗?
答案 0 :(得分:7)
如果您将二进制AND
应用于3
和3
(这两个嵌套printf
调用的返回值),则会得到3
。
请注意,代码实际上包含未定义的行为,因为未定义嵌套调用的顺序。
答案 1 :(得分:6)
printf
函数的返回值是传输的字符数,如果有错误则返回负值。
printf("%d %d",5,5)
会返回3
printf("%d %d",7,7)
也会返回3
因此printf("%d %d",5,5) & printf("%d %d",7,7)
为3 & 3
,评估为3
。
答案 2 :(得分:2)
3是两个printf返回的值的Bitwise AND。
printf返回打印的字符数。
在您的情况下,printf("%d %d",5,5)
打印了三个字符,分别是两个5和一个空格,同样printf("%d %d",7,7)
也打印了两个7和一个空格。因此printf都返回3.
所以,3是3 & 3
答案 3 :(得分:0)
如你所见:http://en.wikipedia.org/wiki/Printf_format_string,printf返回打印字符的数量,所以:
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
由以下内容组成:
printf("%d %d",5,5) return 3 (5 space and 5) and print 5 5
printf("%d %d",7,7) return 3 (7 space and 7) and print 7 7
在这个阶段,我们得到了:5 57 7
而且3 & 3 = 3
,最后你得到了这个输出:
5 57 73
问候。