现在的位置: 首页 > 综合 > 正文

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

2013年10月04日 ⁄ 综合 ⁄ 共 265字 ⁄ 字号 评论关闭

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

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

【上篇】
【下篇】

抱歉!评论已关闭.