阅读Joshua Bloch撰写的Effective Java中的内容。
我找到了这个问题的答案,这里是解释:计算机使用二进制算术工作,
Math.absjava或
absolute任何语言的函数的逻辑如下:
if(num >= 0) return num;else return (2's complement of the num);
注意:如何找到2的补码
对于给定的数字,我们首先找到它的补数,然后再加1。例如,假设我们的数字是
101011的补数=
010102的补数=
01011(将1加到1的补数中)
现在,为了使它变得简单明了,让我们说我们的Integer(signed)大小为3位,这是可以使用这4位产生的数字的可能列表:
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是
Integer.MIN_VALUE。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)