Java中整型最大值+1

在Java中,整型(int类型)的最大值是2147483647,而最小值是-2147483648。

那么我们现在对int类型最大值+1,会发生什么结果?

代码如下:

打印结果:

可以看到输出结果不是2147483648;而是-2147483648(int类型的最小值)。

这是为什么呢?

首先,大家都知道:任何一个数字,存储到计算机当中,都是以二进制的形式进行存储的,而Java的数值是采用补码来表示的。

原码:原码是最直接的一种表示法,最高位表示符号位,0表示正数,1表示负数。

反码:正数的反码与其原码相同。负数的反码是其原码除符号位外,所有位取反。

补码:正数的补码与其原码相同。负数的补码是其反码加1。

当一个int类型的变量值达到了最大值并尝试加1时,会发生溢出,因为整数不能存储在负的二进制补码中所需的额外位中。在这种情况下,Java的整数溢出是允许的,结果会变成整型的最小值-2147483648。

我们接下来用byte类型举个例子:

byte类型的最大值为127,最小值为-128

127的原码和补码都为:0 1 1 1 1 1 1 1 ,补码+1就等于 1 0 0 0 0 0 0 0 ,最高位为符号位,因为是1,就代表是负数,那么我们按照补码表示负数的规则,以逆运算的方式求出它的绝对值,就知道这个负数的值了。

运算如下:

1、补码取反:1 0 0 0 0 0 0 0 →0 1 1 1  1 1 1 1 ;

2、转换成十进制:127;

3、十进制加负号:-127;

4、再-1:-128;

因此 byte类型的最大值+1之后输出的也是最小值,这也就是为什么java中整数类型的表示范围不是对称的原因。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值