强制类型转换中int转换为byte类型

强制类型转换中int转换为byte类型

int ii=666;
byte bb=(byte)ii;
System.out.println(bb);//打印得-102

今天学习Java时碰到这个问题,百思不得其解(原谅一个材料硕士刚刚转换,啥都不懂~~),找人问了一下,也算解决了,把笔记和思路分享一下。
首先我们在解决这道题之前,要了解二进制的概念,对于二进制数,最高位(从左开始的第一位,比如10011010的符号位就是左边开始的1)为符号位,0表示正数,1表示负数,剩余数值部分是真值.
因为最高位是符号位,当符号位是1时,表明它是一个负数,负数在计算机中是以补码形式存在的,因此还需要换算成原码。 所有的数字在计算机底层都是以二进制形式存在的,原码是直接将一个数值换算成二进制数,但计算机以补码的形式保存所有的整数
补码的计算规则。1.正数的补码和原码完全相同
2.负数补码是其反码加1;反码是对原码按位取反,只有最高位(符号位)保持不变
以符号位为1(负数)为例
10001110 补码
反码转换为补码,反码加1得补码
10001101 反码
原码转换为反码,符号位不变,其他位取反
11110010 原码

回到这题,可以理解为一个32bit(int)截取为8bit(byte),再经历一次求补码的过程
666对应32bit二进制为00000000 00000000 00000010 10011010
截取8bit为10011010,理解为:第一位为符号位是1,所以是负的,数据位为0011010,求补码?
补码(反码为1100101),加1后为1100110,对应的十进制数为102,因为符号位为负,所以为-102
WX公众号(程学文的读书笔记)

发布了1 篇原创文章 · 获赞 0 · 访问量 13

猜你喜欢

转载自blog.csdn.net/codeLearner_CXW/article/details/103949665