不错,收藏!
原文地址:用位运算求绝对值(转)
作者: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进行了颠倒。
所以 就有了以上的求绝对值的方法。
本文介绍了一种使用位运算实现整数绝对值的方法,避免了传统的判断语句,展示了计算机底层操作的精妙之处。
4826

被折叠的 条评论
为什么被折叠?



