我正在帮助某人完成他们的功课,并遇到了这个奇怪的问题.问题是编写一个函数来反转有符号整数的字节顺序(这就是函数的指定方式),这就是我提出的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果传递0xFF000000给此函数,将导致第一个赋值0xFFFFFFFF.我真的不明白发生了什么,但我知道它与签名和未签名之间的来回转换有关,或类似的东西.
如果我附加ul到0xFF它工作正常,我认为这是因为它被迫无符号然后转换为签名或在那个方向的东西.结果代码也会发生变化; 没有说明ul符它使用sar(右移算术),但作为无符号它使用shr按预期.
如果有人能为我阐明这一点,我将非常感激.我应该知道这些东西,我以为我做了,但我真的不确定这里发生了什么.
提前致谢!