大家都知道一个byte类型的长度为-128~127,那么要求超过长度的内容很容易就想到强制转换,比如
byte b = (byte)130;
那么他的结果会是多少呢?是130呢还是byte的最大单位127?还是什么呢,下面我们运行出来答案是-126。那么为什么是-126呢,以下是过程
计算机在运算时通常用补码进行运算,那么什么是补码呢?
首先我们来了解以下什么是原码:
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
反码: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1
例如求130的补码
130是一个整型(int),int占用4个字节,也就是4组8个二进制位,所以130的原码是
00000000 00000000 00000000 10000010
由于130是个整型,他被强制转换到byte类型,所以这里强制转换为1个字节,砍掉了前3组的8个二进制位
所以被强制转换后的原码是
10000010
接下来求他的反码,由于第一位是符号位,符号位为1,所以是个负数,负数的反码是符号位不变,其余各个位取反。所以他的反码是
11111101
最后求他的补码,负数的补码是最后一位+1,所以补码是
11111110
转化为10进制也就是-126,这就是为什么开头代码打印出来是-126的原因