位运算求绝对值的方法?

 int abs(int x)                         //取绝对值
{
    x=x<<1;
    x=x>>1;
    return x;
}
这种方法对吗?
 int abs(int x)                         //取绝对值
{
    int temp = x >> 31;
    return (x ^ temp) - temp;
}
这种方法是怎么实现的?

首先你要知道计算机存的是补码

所以上面第一个有点想当然了
至于下面的算法

temp = x >> 31;
判断temp 正temp为0 很好理解 负数temp 为-1? 这是算数移位 负数移31位 其值为1 就是111...1111 这是补码形式 其值为-1

(x ^ temp) - temp;
x与其异或 - -1 异或的话11为0 01为1 其实就是取反加一 就是其正数值

简单点说你要知道int的存储形式 存的全是补码 正数一样 负数可不是最前面有个1那么简单
还有你你要了解移位运算符 算数左移的计算方式 那个异或^还是比较好理解的 这些基础很重要