下面这个表达式在c++中是什么意思?

what is the meaning of the following expression in c++

本文关键字:是什么 意思 c++ 表达式      更新时间:2023-10-16

下面这个表达式在c++中是什么意思?

(variable1 | (variable2 << 8))

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

它将两个变量连接在一起。
假设有两个字符,aba|b<<8b的8位位左移,|ab中的每一位位都置位。
因此,在本例中,结果将是" ab "。

'a'是97,'b'是98,所以按位计算如下:

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

| is Bitwise OR
<< is Bitwise left shift operator

   (variable1 | (variable2 << 8))

variable2(8位)左移8,然后将ORvariable1(8位)的结果左移,结果输出将两个变量variable1variable2合并为一个变量(16位)

您可以将其视为按位方式"连接"两个变量。

如果:

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

如果variable1variable1是8位值,则将它们合并为单个16位值

如果两个变量都是字节,那么这是有意义的。在这种情况下,它会将它们组合成一个更大的变量,所以首先是8位的variable2,然后是8位的variable1。

在您的代码中,variable1的8位最低有效位(最右边)从右边附加到variable2的位,variable2的位向左移动8。

表示variable1的位

xxxxxxxxxxxxxxxxxxxxxxxxwxxxxxxx

variable2的位作为

yyyyyyyyzyyyyyyyyyyyyyyyyyyyyyyy

然后表达

(variable1 | (variable2 << 8))

将导致

zyyyyyyyyyyyyyyyyyyyyyyywxxxxxxx

我不知道你所说的"含义"是什么意思-但这是一个变量与另一个变量的按位或运算,这个变量左移了8位(你可以认为是乘以256)

如果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有一些共同的位。