请问如何避免用判断来实现求一个整数的绝对值

请问如何避免用判断来实现求一个整数的绝对值


把一个负数的补码连符号位求反后再加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)

你可能感兴趣的:(请问如何避免用判断来实现求一个整数的绝对值)