我们知道java中的byte类型数据在内存中是占用一个字节的,因此一个byte类型的数据他的范围在-128~127之间。那么当我们对两个byte类型的数据进行运算后得到的结果若不在这个范围内,那最终得到的结果又是什么呢?接下来我们一起来探索一下。
b1+b2的结果是130,很明显这已经超出了一个byte类型数据的范围了,那么这个-126的结果又是怎么来的呢?来分析一下:
我们知道数据在计算机内存中是以其补码的形式存在的,并且其最高位是一个符号位。b1+b2计算出来的结果是一个4字节的int类型(至于为什么是int类型,请看https://mp.csdn.net/postedit/83079980),当我们将一个4字节int类型强转成一个1个字节的byte类型时就会对其在内存中的数据进行裁剪。int类型的130转化为其在内存中的二进制补码为
00000000 00000000 00000000 10000010
将其进行强制转换成一个字节的byte类型后变成10000010
其中最高位的1为符号位,因此它表示的是一个负数,并且这是一个结果的补码形式,现在我们将其转为它的原码形式得到11111110(最高位还是符号为),结果的十进制就是-126。