[英]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是真的。
也许您正在考虑的是按位运算符。 按位并且只是&
,并且按位或只是|
&&运算符将检查两个输入,如果两个输入都为真或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.