int abs(int x) //取绝对值
{
x=x<<1;
x=x>>1;
return x;
}
这种方法对吗?
int abs(int x) //取绝对值
{
int temp = x >> 31;
return (x ^ temp) - temp;
}
这种方法是怎么实现的?
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 其实就是取反加一 就是其正数值