不错,收藏!
原文地址:用位运算求绝对值(转)
作者:shuishixigua2010
前些天在群里讨论如何实现abs并且不使用if,while,for ?:这些判断语句。
int abs(int x) {
}
这是一位大牛的代码,虽然没有使用比较语句,但是暗含了比较。
有没有更好的实现方法,查看C库中的abs后,发现他只有5条汇编指令,转换成C语言就是这样。
int abs(int x) {
}
这段代码巧妙的运用了 一个负数右移31位后会变成 0xffffffff,一个正数右移31位则为 0x00000000
0xffffffff ^ a + a = - 1
因为 1011 ^ 1111 = 0100 异或1111其实是把a的0和1进行了颠倒。
所以 就有了以上的求绝对值的方法。