我看到了这段C代码:
typedef int gint
// ...
gint a, b;
// ...
a = (b << 16) >> 16;
为了方便表示,假设此时
b = 0x11223344
。据我所见,它执行以下操作:
b << 16
将得到0x33440000
>> 16
将得到0x00003344
如果
b & 0x0000ffff
也能起作用,为什么有人要写 (b << 16) >> 16
呢?后者难道不更容易理解吗?在这种情况下使用位移是否有任何原因?是否存在任何边缘情况使得这两种方法不能相同?
uint32_t
,这与&
掩码相同。对于int
,在右移时可能会得到符号扩展。那么gint
是什么? - Useless