java - 整数最小/最大值特殊溢出行为

标签 java scala jvm

为什么 Integer.MIN_VALUE * 2 等于 0

Integer.MAX_VALUE * 2等于-2

让我更好地解释一下:

我知道它会溢出,但为什么会得到这些特定的结果?

最佳答案

Integer.MIN_VALUE= -2147483648 .看一下 2 * -2147483648 的位计算

   Integer.MIN_VALUE*2  = Integer.MIN_VALUE+Integer.MIN_VALUE


         -2147483648=  10000000 00000000 00000000 00000000 ->32 bit
                      +10000000 00000000 00000000 00000000 
  _________________________________________________________________
     2* -2147483648= 1 00000000 00000000 00000000 00000000 Result is 0
                     |
                    This bit will be omitted due to limitation of 32 bit

Integer.MAX_VALUE=2147483647 ,看看2 * 2147483647的位计算

   Integer.MAX_VALUE*2  = Integer.MAX_VALUE+Integer.MAX_VALUE


          2147483647=  01111111 11111111 11111111 11111111 ->32 bit
                      +01111111 11111111 11111111 11111111 
  _________________________________________________________________
       2* 2147483647=  11111111 11111111 11111111 11111110 Result is -2

关于java - 整数最小/最大值特殊溢出行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282420/

相关文章:

Java 堆大小比 -Xmx 大 20 倍 - 这怎么可能?

java - 我应该在这个系统上为 Eclipse 使用什么内存设置?

java - 如何模块化 A* 中的启发式(运行时启发式)

java - 从 protected Java方法返回Map

mysql - 数据库 session playframework 的隐式声明

scala - 跨 Akka 集群同步数据的简单方法?

java - 为什么当设置不同的 JVM XMX 时,相同代码的 RES 内存会发生变化

java - 将 Mapper 替换为 MultithreadMapper 时,映射中的键类型不匹配

java - 为什么一个程序会为我编译,而不是为另一个人编译?

scala - Akka单点故障