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