当把一个int型常量赋值给一个byte、short和char类型变量时,会造成精度损失。例如:将常量128强制转换为byte型,我们知道byte表示的数的范围是-128~127,通过输出我们知道,转换后的值为-128.接下来我通过形象的方式对这个结果进行解释。
为了完整了解结果的由来我们要先了解计算机的二进制方面的知识
以byte为例:
在计算机中,数字都是以补码的形式存储的,也就是说,-127在计算机中存储形式为1000 0001
由此我们可以推出-128的补码为1000 0000
当你强制将int型变量转换为byte时,计算机就会将1000 0000前的数字比特位截断!
此时,1000 0000对应的是-128的补码。
知识点:
1.数据在计算机中的存储形式为补码
2.正数的原码“三码合一”,即原码、反码、补码都是一样的
3.负数的反码为原码除符号位外,按位取反;补码为反码+1