1 描述
通常使用Math.abs 求绝对值,可以使用位运算进行。
2 实现
方法一
public static int abs(int a) {
int i = a >> 31;
return i == 0 ? a : (~a + 1);
}
方法二
public static int abs2(int a) {
int i = a >> 31;
return ((a^i) - i);
}
3 总结
通过取反的方式进行,原码取反变反码,反码加1变成补码 ,例如:
1 是0000 0001
-1的原码:1000 0001
反码:1111 1110
补码:1111 1111
取反实质上就是同-1做异或操作
~x = x^0x FFFFFFFF