这条线会打印什么?
printf("hello\n") | (printf("goodbye\n") || printf("world\n"));
经过测试,打印出来:
hello
goodbye
但我仍然不知道为什么并仍然坚持下去,任何提示都会非常感激!顺便说一下,我知道printf()返回输出的字符数,但仍然没有得到它背后的逻辑。
答案 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)
谢谢,