任何人都可以解释这段代码片段如何将输出提供为23而不是27.我可能对按位操作的理解较少。
#include <stdio.h>
int main()
{
int a = 20, b = 7;
printf("%d%",a|b);
}
答案 0 :(得分:6)
您需要先了解or
在某个位置的工作原理(有关各种按位运算符的更多详细信息,请参阅here):
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
请注意,最后一行,1 | 1
不与1 + 1
相同。
因此,由于or
对多位值的结果只涉及对这些值中的每个相应位执行此操作,因此表达式a | b
将仅如果两个值共享 no 一位,则等于a + b
。
对于您的值,他们执行共享一位:
+-shared one-bit--+
| |
V V
20 = 16 + 4 = 0001 0100
7 = 4 + 2 + 1 = 0000 0111
---- ----
20 | 7 = 0001 0111 = 16 + 4 + 2 + 1 = 23
这解释了您获得的价值以及为什么它与20 + 7
不同。
答案 1 :(得分:3)
因为在二进制20中是10100而7是00111。
所以你有:
10100
00111 |
-----
10111
是23的二进制表示,而不是27。
PS:|
是按位或运算符,因此如果至少一个操作数为1,则它给出1,否则为0.