c ++中以下表达式的含义是什么?
(variable1 | (variable2 << 8))
它是什么意思?它代表什么?
答案 0 :(得分:9)
它连接两个变量
假设您有两个字符a
和b
。 a|b<<8
将b
8位向左移,|
设置a
或b
中的每一位。
因此,在此示例中,结果将为“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)
如果variable1
和variable1
是8位值,则它将它们组合成一个16位值。
答案 5 :(得分:0)
我不知道你的意思是什么意思 - 但是这是一个变量,它与另一个被左移8位的变量进行按位OR运算(你可以认为它乘以256)
答案 6 :(得分:0)
如果variable1
和variable
都小于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))的结果,因为variable1
和variable2 << 8
有一些共同的位。
答案 7 :(得分:0)
在您的代码中,variable1
的8个最低有效位(最右侧)位从右侧追加到variable2
位,variable2
位向左移位8位
如果将variable1
的位表示为
xxxxxxxxxxxxxxxxxxxxxxxxwxxxxxxx
和variable2
的位为
yyyyyyyyzyyyyyyyyyyyyyyyyyyyyyyy
然后表达
(variable1 | (variable2 << 8))
会导致
zyyyyyyyyyyyyyyyyyyyyyyywxxxxxxx