c ->> 轮类运算符(operator)没有按预期工作

标签 c gdb

我正在学习 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/

相关文章:

linux - GDB 调试器错误

python - 如何通过gdb获取python eventlet堆栈

c - 使用 intptr_t 而不是 void*?

c - C 程序编程中使用终端导入文本文件

gdb - 使用JLink和GDB读取Cortex M0 MCU的外设寄存器

C 64 位服务器上的奇怪行为

linux - CentOS 7 上的图形调试器界面

c - 结构格式的 atof() 函数测试用例

python - 使用 ctypes 访问未在方法映射表中公开的方法

luaL_loadfile()可以用luaL_loadbuffer()代替吗?