所以我试图测试一个超短函数来让我从整数中获取某些位 x 到 y 的整数值,但是在发生符号扩展时遇到了一些问题。我尝试转换为无符号整数,然后使用无符号整数进行转换,但这似乎不起作用。代码如下:
#include <stdio.h>
int main()
{
int bo_bits = 2;
int tag_bits = 28;
int addr = 1;
unsigned int index = (unsigned int)addr;
index = index << tag_bits;
index = index >> bo_bits;
// at this point I would return (int)index;
return 0;
}
我不明白为什么会发生符号扩展,因为我只移动了一个无符号整数。我还只使用“addr”运行代码并将其作为无符号整数,但这也没有改变输出。
当我在 linux 机器上运行 gdb 中的函数时,索引的输出值为 536870912,并且在在线编译(现在编码地面)时,我得到的值为 67108864。
编辑:有几个人问我是如何得到值 536870912 的,我已经让它通过两个断点运行 gdb 并p get_index(1)
从 gdb 运行命令。实际代码如下:
unsigned int index = (unsigned int)addr;
index = index << tag_bits;
index = index >> bo_bits;
return (int)index;
感谢所有的帮助!