比方说,a是无符号的32位整数。
a << 24
(a & 0xff)<<24
类似的,这两个的任何区别
a >> 16
(a >> 16) & 0xff
答案 0 :(得分:4)
你的第一个例子:
a << 24
(a & 0xff)<<24
在32位无符号整数的情况下,结果没有区别。 从C标准(6.5.7按位移位运算符):
E1的结果&lt;&lt; E2是E1左移E2位位置;腾空 位用零填充。如果E1具有无符号类型,则值为 结果是E1×2 E2 ,比最大值减少一个模数 在结果类型中可表示。 (...)
你的第二个例子
a >> 16
(a >> 16) & 0xff
秒行将结果截断到0 .. 255范围,而第一行则不会。 如果你的意思是
之间的区别a >> 16
(a >> 16) & 0xffff
那么无符号32位整数也没有区别:
E1&gt;的结果&gt; E2是E1右移E2位位置。如果E1有 无符号类型或E1具有带符号类型和非负值, 结果的值是E1 /的商的不可分割的一部分 2 E2 。 (...)
请注意,“无符号”在这里很重要。对于有符号整数,行为可以 是不同的,实现定义的或未定义的。
答案 1 :(得分:0)
这两者有何不同:
a >> 16
(a >> 16) & 0xff
是的,每个a > 0x00FFFFFF
都会得到不同的结果。
答案 2 :(得分:0)
a << 24
(a & 0xff)<<24
结果之间没有区别,但后者可能会避免影响寄存器的溢出标志?