在一个论坛上看到一个同学 问 这样一个题目
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 ;验证了一下 是正确的。
关于 byte 接收 超byte 范围的数值,输出我们想不到的结果 如何解释
原文:http://www.cnblogs.com/castworld/p/5024851.html