c ++中以下表达式的含义是什么?

时间:2011-09-20 15:20:40

标签: c++ bit-manipulation

c ++中以下表达式的含义是什么?

(variable1 | (variable2 << 8))

它是什么意思?它代表什么?

8 个答案:

答案 0 :(得分:9)

它连接两个变量 假设您有两个字符aba|b<<8b 8位向左移,|设置ab中的每一位。 因此,在此示例中,结果将为“ab”。

'a'是97,'b'是98,所以按位发生以下情况:

a:      01100001
b:              01100010
b<<8:   0110001000000000
a|b<<8: 0110001001100001

答案 1 :(得分:7)

| Bitwise OR
<< Bitwise left shift operator

   (variable1 | (variable2 << 8))

左移variable2(8位)除8,然后OR将结果移至variable1(8位),结果输出将合并两个变量{{ 1}}和variable1表示为一个变量(16位)。

答案 2 :(得分:3)

您可能会认为它是以串行方式“连接”两个变量。

如果:

x = 00000000 00001000 (16-bit binary)
y = 00000000 00100010 (16-bit binary)

然后:

    (y << 8) = 00100010 00000000
x | (y << 8) = 00100010 00001000

在你发现它的代码的上下文中它实际上意味着什么是任何人的猜测。


实际上,如果x在最高有效字节中设置了任何位,则“连接”不准确:

如果:

x = 01000000 00001000 (16-bit binary)
y = 00000000 00100010 (16-bit binary)

然后:

    (y << 8) = 00100010 00000000
x | (y << 8) = 01100010 00001000

答案 3 :(得分:1)

如果两个变量都在字节中,那将是有意义的。在这种情况下,它会将它们组合成一个较大的变量,因此首先是变量2的8位,然后是变量1的8位。

答案 4 :(得分:0)

如果variable1variable1是8位值,则它将它们组合成一个16位值。

答案 5 :(得分:0)

我不知道你的意思是什么意思 - 但是这是一个变量,它与另一个被左移8位的变量进行按位OR运算(你可以认为它乘以256)

答案 6 :(得分:0)

如果variable1variable都小于256,则该语句与variable1 + (variable2*256)相同。

更一般地说,|是二进制或且<<是左移。

所以如果我们开始:

variable1 = 321;
variable2 = 123;

二进制值为:

variable1 =>  0000 0001 0100 0001
variable2 =>  0000 0000 0111 1011

variable2左移8,结果为:

              0111 1011 0000 0000

所以variable1 | (variable2 << 8)等于

              0111 1011 0100 0001

这是32065.这小于31519,这是(321 +(123 * 256))的结果,因为variable1variable2 << 8有一些共同的位。

答案 7 :(得分:0)

在您的代码中,variable1的8个最低有效位(最右侧)位从右侧追加到variable2位,variable2位向左移位8位

如果将variable1的位表示为

xxxxxxxxxxxxxxxxxxxxxxxxwxxxxxxx

variable2的位为

yyyyyyyyzyyyyyyyyyyyyyyyyyyyyyyy

然后表达

(variable1 | (variable2 << 8))

会导致

zyyyyyyyyyyyyyyyyyyyyyyywxxxxxxx