我正在学习C语言。我有这样的代码,更可在需要时提供:当我用GDB和打印/x mask1
>>移位操作符不按预期方式工作
int result = 0;
int mask1 = 0x0000ffff;
mask1 = mask1 >> 28;
,我得到0x0
,这是正确的。 那么为什么:
int result = 0;
int mask1 = 0xffffffff;
mask1 = mask1 >> 28;
print 0xffffffff
应该不是被打印0x0000000f
,因为我左移28位?
它与我在64位机器上占用的位数有关吗? 我看着this,但它并没有完全回答。
将'mask1'设为'unsigned int',您将体验到您期望的行为(即逻辑右移)。 – oldrinb
@veer谢谢。那样做了。 – Clara
阅读实用的程序员,这本书有一个标题为“选择不坏”的部分。它描述了你遇到的问题。 – Incognito