关于 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  ;验证了一下  是正确的。

posted on 2015-12-07 00:23  yulai2015  阅读(607)  评论(0编辑  收藏  举报

导航