在JAVA运算时结果是正数,为什么输出却是一个特别大的负数

看一段代码

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

发布了25 篇原创文章 · 获赞 8 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/FungLi_notLove/article/details/103067958