【发布时间】:2012-08-25 17:28:11
【问题描述】:
我正在学习 C 语言。我有这个代码,如果需要可以提供更多:
int result = 0;
int mask1 = 0x0000ffff;
mask1 = mask1 >> 28;
当我使用 gdb 并打印 /x mask1 时,我得到了 0x0,这是正确的。
那为什么会这样:
int result = 0;
int mask1 = 0xffffffff;
mask1 = mask1 >> 28;
print 0xffffffff
不应该打印0x0000000f,因为我要左移 28 位吗?
这与 int 在我的 64 位机器上占用的位数有关吗? 我查看了this,但它并没有完全回答所有问题。
【问题讨论】:
-
将
mask1设为unsigned int,您将体验到您所期望的行为(即逻辑右移)。 -
阅读务实的程序员,书中有一节题为“Select is not broken”。它描述了您在此处遇到的问题。