为什么Integer.MIN_VALUE的绝对值等于Integer.MIN_VALUE

为什么Integer.MIN_VALUE的绝对值等于Integer.MIN_VALUE,第1张

为什么Integer.MIN_VALUE的绝对值等于Integer.MIN_VALUE

阅读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的补数中)

现在,为了使它变得简单明了,让我们说我们的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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5501172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存