Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';关于位运算,这两种方法的区别是什么?_C++_C_Visual C++ - Fatal编程技术网

C++ 什么';关于位运算,这两种方法的区别是什么?

C++ 什么';关于位运算,这两种方法的区别是什么?,c++,c,visual-c++,C++,C,Visual C++,例如,a是一个无符号32位整数 a << 24 (a & 0xff)<<24 您的第一个示例: a << 24 (a & 0xff)<<24 秒行将结果截断为0的范围。。255,而第一个没有。 如果你的意思是 a >> 16 (a >> 16) & 0xffff 然后,无符号32位整数也没有区别: E1>>E2的结果是E1右移位E2位位置。如果E1有 无符号类型,或者如果E1具有有符号类型和非负

例如,a是一个无符号32位整数

a << 24
(a & 0xff)<<24
您的第一个示例:

a << 24
(a & 0xff)<<24
秒行将结果截断为0的范围。。255,而第一个没有。 如果你的意思是

a >> 16
(a >> 16) & 0xffff
然后,无符号32位整数也没有区别:

E1>>E2的结果是E1右移位E2位位置。如果E1有 无符号类型,或者如果E1具有有符号类型和非负值, 结果的值是E1商的整数部分/ 2E2。 (……)

请注意,“unsigned”在这里很重要。对于有符号整数,其行为可以 可以是不同的、实现定义的或未定义的。

您的第一个示例:

a << 24
(a & 0xff)<<24
秒行将结果截断为0的范围。。255,而第一个没有。 如果你的意思是

a >> 16
(a >> 16) & 0xffff
然后,无符号32位整数也没有区别:

E1>>E2的结果是E1右移位E2位位置。如果E1有 无符号类型,或者如果E1具有有符号类型和非负值, 结果的值是E1商的整数部分/ 2E2。 (……)

请注意,“unsigned”在这里很重要。对于有符号整数,其行为可以
可以是不同的,实现定义的,也可以是未定义的。

这两者有什么区别:

a >> 16
(a >> 16) & 0xff

是的,对于每一个
a>0x00FFFFFF

这两个变量,您将得到不同的结果:

a >> 16
(a >> 16) & 0xff
a << 24
(a & 0xff)<<24

是的,对于每个
a>0x00FFFFFF

a
a,您将得到不同的结果。第二次移位仅是
a
的LSB。他们完全不同!第二个将为
a>0x00FFFFFF
产生不同的结果。第二个只移动
a
的LSB。他们完全不同!第二个将为
a>0x00FFFFFF
产生不同的结果。如果此系统上的
无符号int
大于32位会怎么样?那么
a的结果我认为是正确的,前提是由于某种原因,最终结果确实被截断为
uint32\t
。我没有看到问题中的具体说明,因此我认为值得指出这个警告。如果这个系统上的
无符号int
大于32位会怎么样?那么
a的结果我认为你是正确的,前提是最终结果确实由于某种原因被截断为
uint32\t
。我没有看到问题中的具体说明,所以我认为值得指出这个警告。
a << 24
(a & 0xff)<<24