这条线会打印什么,为什么?

时间:2014-10-20 09:17:42

标签: c

这条线会打印什么?

printf("hello\n") | (printf("goodbye\n") || printf("world\n"));

经过测试,打印出来:

hello
goodbye

但我仍然不知道为什么并仍然坚持下去,任何提示都会非常感激!顺便说一下,我知道printf()返回输出的字符数,但仍然没有得到它背后的逻辑。

2 个答案:

答案 0 :(得分:3)

|  - Bitwise OR operator
|| - Logical OR operator

printf("hello\n") | (printf("goodbye\n") || printf("world\n"));

在这种情况下,printf("hello\n")printf("goodbye\n")都将被执行,因为您在它们之间使用了|。由于它是按位运算,因此都将执行。另外printf返回打印的字符数。因此,在您的情况下,printf("hello\n") | printf("goodbye\n")将导致6 | 8 = 0110 | 1000 = 1110 = 14(十进制)。

因此表达式等同于14 || printf("world\n")。由于14(非零)本身满足逻辑OR检查,因此不会进入printf("world\n"),这将是6。

答案 1 :(得分:2)

(printf("goodbye\n") || printf("world\n"))

“再见”和“世界”都是真实的陈述。因此,它将“再见”作为第一个按顺序执行。

试试这个以获得更多说明

printf(printf("hello\n") | (printf(NULL) || printf("world\n")));
Output:
hello
world

因为“NULL”为FALSE且“world”为TRUE。 (0 || 1 = 1)

谢谢,

相关问题