今日学习内容打卡
int b1 = 67;
int b2 = 89;
byte b3 = (b1+b2);
System.out.println(b3)
在进行扩展的赋值运算符底层隐含了强制类型转换,也就是意味着在(b1+b2)前方不加(byte)进行强制转换,就会输出报错,因为在java中自动进行了强制类型的转换,使byte类型转换为了int类型。
int b1 = 67;
int b2 = 89;
byte b3 = (byte) (b1+b2);
System.out.println(b3)
在进行强制类型转换后,得出了-100是为什么呢?
因为int类型是4字节,而byte类型只有1个字节,所以当int类型被强制转化为byte类型时,就会被截断成一个字节。
如:67 + 89 = 156
156 在int 类型的二进制的表现形式是
00000000 00000000 00000000 10011101
做了截取后的结果应该是只剩下最后一个字节,即:
10011100
通过观察最高位符号位是1,这是一个负数,因为在计算机中所有的数据都是以补码的形式出现的所以要算它的补码
原码:1 001 1100 原码变反码,最高位符号位不变,其他数值位1变0,0变1得反码
反码:1 110 0011 反码变补码 就是反码加1得
补码:1 110 0100
最终的看到的结果就是
1 1100100 最高位 是符号位不运算,数值为转化为十进制是64+32+4=100符号位负
所以为-100
————————————————
学习思路借鉴了楼下该博主,在此表达感谢。
版权声明:本文为CSDN博主「蛋蛋君de忧伤」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZHW1551706847/article/details/70158211