byte类型的数据进行运算时超过其存储范围怎么办?

我们知道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。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值