>>班次操作员没有按预期工作

Cla*_*ara 1 c gdb

我正在学习C语言.我有这个代码,如果需要可以提供更多代码:

int result = 0;
int mask1 = 0x0000ffff;
mask1 = mask1 >> 28;
Run Code Online (Sandbox Code Playgroud)

这个当我使用gdb和print时/x mask1,我得到了0x0,这是正确的.那么为什么:

int result = 0;
int mask1 = 0xffffffff;
mask1 = mask1 >> 28;

print 0xffffffff
Run Code Online (Sandbox Code Playgroud)

不应该打印0x0000000f,因为我要换28位?

是否与我的64位机器上占用的int位数有关?我看着这个,但它并没有完全回答所有问题.

Dan*_*her 5

在负整数上右移的行为是实现定义的.一种常见的行为是算术移位,它进行符号扩展.这样做的好处是,右移也可以除以2的幂(舍入到负无穷大),就像正数一样.