阅读 Joshua Bloch 撰写的《Effective Java》中的这篇文章。
我找到了这个问题的答案,解释如下:
计算机使用二进制算术,逻辑Math.abs
在java或absolute
任何语言的函数如下:
if(num >= 0)
return num;
else
return (2's complement of the num);
注意:如何求2的补码
对于给定的数字,我们先求它的补码,然后加1。例如
考虑我们的数量是10101
1的补码=01010
2的补码=01011
(在 1 的补码上加 1)
现在,为了简单明了起见,我们假设我们的整数(有符号)大小是 3 位,那么这里是可以使用这四位生成的可能的数字列表:
000 --> 0 (0)
001 --> 1 (1)
010 --> 2 (2)
011 --> 3 (3)
100 --> 4 (-4)
101 --> 5 (-3)
110 --> 6 (-2)
111 --> 7 (-1)
既然是有符号的,就意味着一半数是负数,另一半是正数(负数是第一位为1的数)。让我们从000
并尝试找到它的负数,它将是000
.
2's complement of `000` = 1 + `111` = `000`
2's complement of `001` = 1 + `110` = `111`
2's complement of `010` = 1 + `101` = `110`
2's complement of `011` = 1 + `100` = `101`
2's complement of `100` = 1 + `011` = `100`
2's complement of `101` = 1 + `010` = `011`
2's complement of `110` = 1 + `001` = `010`
2's complement of `111` = 1 + `000` = `001`
从上面的演示我们发现2的补码111(-1) is 001(1)
,类似地 2 的补码110(-2) is 010(2)
, 2 的补码101(-3) is 011(3)
和 2 的补码100(-4) is 100(-4)
正如我们所看到的,-4 是使用 3 位可能的最小负数。
这就是为什么绝对的原因Integer.MIN_VALUE
is Integer.MIN_VALUE
.