我正在学习 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 位吗?
这与我的 64 位机器上 int 占用的位数有关吗? 我看了this但它并没有完全回答所有问题。
最佳答案
负整数右移的行为是实现定义的。一种常见的行为是算术移位,它进行符号扩展。这样做的好处是右移也是除以 2 的幂(四舍五入为负无穷大),就像正数一样。
关于c ->> 轮类运算符(operator)没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206134/