Tag: sign extension

签名右移=奇怪的结果?

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