java基本数据类型byte的取值范围-128~127,以及溢出后取值的实现

byte取值范围的计算和溢出取值的计算:

  1. 首先看一下byte类型在java.lang包下的源码,源码指定了byte类型的最大值和最小值。
    在这里插入图片描述
    2.在计算机内存存放的数值都是补码形式,第一位为符号位(可以百度补码概念),对应的取值如下:

负整数转换成二进制

        方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后即为:(-42)10=(11010110)2.

二进制如何转十进制,十进制如何转二进制

 

补码原码十进制备注
0111 11110111 1111127正数最大值
0000 00010000 00011正数最小值
1111 11111000 0001-1负数最大值
1000 00011111 1111-128负数最小值
  1. 综上可得byte类型的取值范围为-128~127
  2. 而当发生溢出时,例如:

在这里插入图片描述 

 

 首先byte b = 127,进行了++b操作之后,变成了128,127二进制表示为:0111 1111,+1后:1000 0000,因为计算机的数值都是补码形式表示,所以1000 0000为补码,

因为第一位为1,所以其为负数,进行取反:0111 1111,加1得到1000 0000,2的7次方=128

即数值为128,又因为其为负数,所以值为-128。

综上所述:溢出后的128的实际值为-128。下面再举个例子验证一下:

 在这里插入图片描述

127二进制补码为:0111 1111,进行累加操作之后,

0111 1111

+1

1000 0000

+1

1000 0001

变为129
129的原码和补码为 1000 0001
首位为1,其为负数,将补码取反加一得到0111 1111
数值为127加上符号位,结果为-127 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值