c - 为什么输出给出这样的值?

标签 c bitwise-operators

任何人都可以解释一下这段代码片段如何将输出输出为 23 而不是 27。我可能对按位运算了解较少。

#include <stdio.h>

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

最佳答案

您需要首先了解如何在位级别工作(有关各种按位运算符的更多详细信息,请参阅here):

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

请仔细注意最后一行,1 | 11 + 1相同。

因此,由于 or 对多位值的结果仅涉及对这些值中的每个相应位进行操作,因此表达式 a |如果两个值没有共同的一位,则 b等于a + b

对于您的值(value)观,它们确实共享一位:

              +-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 不同。

关于c - 为什么输出给出这样的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763166/

相关文章:

检查 int 的位,看看它们是否共享 2 次幂的二进制(仅按位)

c - 无法找到数字文字运算符 ‘operator""x0'

python - 将最左边的设置位转换为右侧交替位的位操作?

c - 关于交换位的问题

c++ - 相同 '==' 条件下的两个 'if' 相等运算符未按预期工作

c++ - 双变量类型输出始终为 0

c - 使用 GCC 链接器强制执行 32 位枚举

c - 左移溢出

MySQL 按位运算

java - 使用Java原生接口(interface)时出现 "fatal: relocations remain against allocatable but non-writable sections"如何解决?