这个 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 是真的。
也许你想到的是位运算符。按位与只是 &
,按位或只是 |
&& 运算符将检查两个输入,如果两个输入均为 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
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 是真的。
也许你想到的是位运算符。按位与只是 &
,按位或只是 |
&& 运算符将检查两个输入,如果两个输入均为 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