关于 byte 接收 超byte 范围的数值,输出我们想不到的结果 如何解释

在一个论坛上看到一个同学  问 这样一个题目

byte num= 127;

num+=1;

结果 :  屏幕输出的 是-128

num+=1 分解表达式就是  num=(byte)(127+1);    这里是 在把一个 int 类型强专成  byte类型,必然会损失精度 ,出现我们无法 理解的结果, 那么  int 类型的128  和结果 -128 到底有什么联系呢?

知识点:  在计算机中数值都是以补码的形式参与运算的。

补码参与 运算 不需要改动 符号位;

0 的补码是 0000-0000

明白了这个  下面我们开始:

  int 类型强转成  byte 类型   那前面3个8位  舍弃掉   只剩下了 后面一个8位  ,那现在我们看一下  舍弃后 128 的补码 是  1000-0000   因为正数的原码、反码、补码都是一样的。   如果我们这样看  这个  补码   1000-0000     因为只有8位  那么 要有一个符号位  第八位1是符号位  也就是说 这个补码的  表式的 一个负数   那么-128 是怎么来的呢?

因为  只能是 1即是符号位,也是数值位  ,如果这样理解  我们同样可以推出  byte 130  =-126  ;验证了一下  是正确的。

转载于:https://www.cnblogs.com/castworld/p/5024851.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值