【问题标题】:What will be printed by this line and why? [duplicate]该行将打印什么内容,为什么? [复制]
【发布时间】:2014-12-15 05:32:16
【问题描述】:

这一行会打印什么?

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

经过测试,打印出来:

hello
goodbye

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

【问题讨论】:

  • 提示:也许弄清楚||| 做了什么?
  • 您的问题标题似乎与您的问题有冲突。你知道它的作用...
  • 我知道 |是按位或,||是 OR 运算符,但仍然不知道为什么它会打印 goodbye 而不是 world :(
  • 也许你弄清楚 C 行中的调用方式?;)

标签: c


【解决方案1】:
|  - 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(非零)本身满足逻辑或检查,它不会继续到 printf("world\n"),这将是 6。

【讨论】:

  • 感谢@Kay 的编辑。我需要做一些研究如何做到这一点:-)
【解决方案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)

谢谢,

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2023-01-11
    • 2014-01-13
    • 2020-04-04
    • 2022-12-02
    • 2021-12-15
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多