我还有一些东西尚未包裹我的脑袋; |
操作数如何评估数字?
#include<iostream>
int main()
{
int x, y, z;
x = 2;
y = 4;
z = x | y;
}
为什么z
在这种情况下被分配6;这是怎么回事?
答案 0 :(得分:9)
运算符|
称为按位OR 。它的真值表是
A B A|B ( operate on bits)
----------
0 0 0
0 1 1
1 0 1
1 1 1
在您的情况下x=2
和y=4
。假设x
和y
都是32位整数,而执行x | y
只需遵循上表。它看起来像
MSB LSB <-- little enidian
x = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0010
|
y = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0100
-------------------------------------------------
z = 0000 0000 | 0000 0000 | 0000 0000 | 0000 0110 => 6
--------------------------------------------------
答案 1 :(得分:2)
|
表示按位OR。 OR应用于每个位。 (4变为100,2变为10):
4 0100
OR 2 0010
------------
== 6 0110
------------
bitwise OR共同产生110,即6。
请注意,这不是一个补充,并且没有像+
运算符那样的位数。
例如:
6 0110
+ 2 0010
------------
== 8 1000
------------
但:
6 0110
OR 2 0010
------------
== 6 0110
------------
答案 2 :(得分:0)
很简单。 '|'被称为按位运算符。如果任一位为1,它将返回1.如果两个位都为0,则此运算符将返回0.
x = 2,即0000 0010(以位表示) y = 4,即0000 0100
现在如果你应用'|',结果将变为0000 0110,即6。