繁体   English   中英

如何计算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中表示它返回0,因为0表示C中为假,true表示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?

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

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

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

&&运算符将检查两个输入,如果两个输入都为真或1然后它将返回1否则它将返回false或0。 运算符将检查是否有任何输入为真或1然后它将返回1否则它将返回false或0

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

在你计算后的代码中

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

False的计算结果为0,但是0之间的任何值都为真( true != false == true != 0

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

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

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

x || y x || y ,为0 || 4 0 || 4 ,暗示false || true false || true

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM