怎么" |"运算符评估两个整数?

时间:2018-05-08 21:13:44

标签: c++

我还有一些东西尚未包裹我的脑袋; |操作数如何评估数字?

#include<iostream>

int main()
{
    int x, y, z;
    x = 2;
    y = 4;

    z = x | y;
}

为什么z在这种情况下被分配6;这是怎么回事?

3 个答案:

答案 0 :(得分:9)

运算符|称为按位OR 。它的真值表是

A  B   A|B ( operate on bits)
----------
0  0    0
0  1    1
1  0    1
1  1    1 

在您的情况下x=2y=4。假设xy都是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。