这个 printf() 语句的输出是如何计算的?

How is the output of this printf() statement computed?

  int x = 3 > 4; 
  int y = 4.98;

  printf("%d %d\n", x && y, x || y);

输出:

 0  1

我的作品:

对于 x 变量:因为 3 > 4 是假的...在 C 中这意味着它 returns 0 因为 0 在 C 中意味着假而真意味着 1 => x = 0

对于 y 变量:由于 y 是一个整数并且给定了小数,因此 y 立即向下转换为 4 => y=4

0的二进制是0000

4的二进制是0100

所以

x && y = 0000 && 0100 = 0000

x || y = 0000 || 0100 = 0100 != 0001 (??)

为什么 x || y = 1?

False 的计算结果为 0,但任何不同于 0 的都为 true (true != false == true != 0)

并且您正在使用逻辑运算符。如果你想要按位运算符,它们是 &(和)、|(或)和 ^(xor)

&&|| 是逻辑运算符而不是位运算符。

0在逻辑运算中被认为是假的,任何其他值都被认为是真。

x || y,即0 || 4,表示false || true

|| 是逻辑 OR 运算符。所以false || true原来是真的。

此处有更多相关信息 - http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Logical-Operators

我认为您混淆了逻辑运算符和按位运算符。 &&就表示'and',||就表示或。因为 y 不为 0,所以它被认为是真的,因为 x 是 0,所以它是假的,所以 x && y 是零,因为 x 是假的,x || y 是 1,因为 y 是真的。

也许你想到的是位运算符。按位与只是 &,按位或只是 |

https://en.wikipedia.org/wiki/Bitwise_operations_in_C

&& 运算符将检查两个输入,如果两个输入均为 true 或 1,则它将 return 1 否则它将 return false 或 0。 在哪里||运算符将检查任何输入是否为 true 或 1,然后它将 return 1 否则它将 return false 或 0。例如

1 || 0 -> 1 1 && 0 -> 0

计算后在你的代码中

x = 0 y = 4 0 && 4 -> 0 0 || 4 -> 1