为什么输出会给出这样的价值?

时间:2018-06-08 14:46:50

标签: c bitwise-operators

任何人都可以解释这段代码片段如何将输出提供为23而不是27.我可能对按位操作的理解较少。

#include <stdio.h>

int main()
{
  int a = 20, b = 7;
  printf("%d%",a|b);
}

2 个答案:

答案 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.

相关问题