我正在帮助某人完成家庭作业并遇到了这个奇怪的问题。问题是编写一个函数来反转有符号整数的字节顺序(这就是函数的指定方式),这是我想出的解决方案:
int reverse(int x)
{
int reversed = 0;
reversed = (x & (0xFF << 24)) >> 24;
reversed |= (x & (0xFF << 16)) >> 8;
reversed |= (x & (0xFF << 8)) << 8;
reversed |= (x & 0xFF) << 24;
return reversed;
}
如果你传递0xFF000000
给这个函数,第一个赋值将导致0xFFFFFFFF
. 我真的不明白发生了什么,但我知道这与有符号和无符号之间的来回转换或类似的事情有关。
如果我追加ul
到0xFF
它工作正常,我认为这是因为它被迫无符号然后转换为有符号或那个方向的东西。生成的代码也会发生变化;没有说明ul
符,它使用 sar(右移算术),但作为无符号,它按预期使用 shr。
如果有人能为我阐明这一点,我将不胜感激。我应该知道这些东西,我以为我知道了,但我真的不确定这里发生了什么。
提前致谢!