任何人都可以解释一下这段代码片段如何将输出输出为 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 | 1
与 1 + 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/