看一段代码
byte a = 10;
int b = 20;
byte c;
c = (byte)(a + b);
//大家猜此处输出的是多少?
System.out,println(c);
这里输出的是30,大多数人都知道
再看一段代码
byte a = 10;
int b = 200;
byte c;
c = (byte)(a + b);
//大家猜此处输出的是多少?
System.out,println(c);
没有什么变化,只是b的值从20更改为了200;
那么输出是多少呢?210?
还是有人说溢出?报错?
输出的结果是 -46
也许有的人猜到了,但为什么是 -46 不是 -96呢,不是其他的数字呢?
byte是一个字节,8位
210的二进制是11010010
在转换为byte类型时8位二进制的第一位成为了符号位
11010010
转换为反码
10101101
再转换为补码
10101110
10101110对应的十进制就是 -46
有的人可能又会问,为啥是补码?
又有人问了,原码,补码,反码是个啥区别呢?要他有何用?
见https://blog.csdn.net/FungLi_notLove/article/details/103068907