请问如何避免用判断来实现求一个整数的绝对值
把一个负数的补码连符号位求反后再加1,就是其绝对值了。比如对于-2来说:
原码 反码 补码 补码全求反 再加1
10000010 11111101 11111110 00000001 00000010
假设是32位整数i:
(i XOR (i SAR 31)) + (i SHR 31)
XOR是异或,SAR是算术右移,SHR是逻辑右移。
用C写就是 (i ^ i >> 31) + ((unsigned)i>> 31)