如何计算此printf()语句的输出?

时间:2015-10-26 16:17:28

标签: c binary printf operators output

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

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

输出:

 0  1

我的工作:

对于x变量:因为3> 4是假的...在C中表示它返回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?

4 个答案:

答案 0 :(得分:2)

我认为你混淆了逻辑和按位运算符。 &&只是意味着'和',||只是意味着或。因为y不是0,所以它被认为是真的,并且因为x是0,所以它是假的,所以x && y是零,因为x是假的,x || y是1,因为y是真。

也许您正在考虑的是按位运算符。按位并且仅为&,按位或仅为|

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

答案 1 :(得分:1)

&安培;&安培;运算符将检查两个输入,如果两个输入都为真或1然后它将返回1否则它将返回false或0。 在哪里作为||运算符将检查是否有任何输入为真或1然后它将返回1否则它将返回false或0.例如

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

计算后的代码

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

答案 2 :(得分:0)

False评估为0,但与0不同的任何内容都为真(true != false == true != 0

您正在使用逻辑运算符。如果您想要按位运算符,则&(和),|(或)和^(xor)

答案 3 :(得分:0)

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

0被视为false,逻辑操作中任何其他值都被视为true。

x || y0 || 4,隐含false || true

||是逻辑OR运算符。所以false || true证明是真的。

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