JAVA中一个简单的问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 07:07:27
public class TextConvert
{
public static void main(String[] args)
{
byte i1=67;
byte i2=89;
byte i3=(byte)(i1+i2);
System.out.print(i3);
}
}
输出的结果是-100.
讲解是:int转换为char时,把高位砍掉,剩下一位是什么就是什么。但是我想不明白这个怎么得来的。请高手指点。

67的二进制表示:01000011
89的二进制表示:01011001

67 + 89 也就是
01000011
+ 01011001
---------------------
10011100

最高位为符号位,这里为1,也就是说结果是负数
因为是补码表示嘛,所以在最高位为1的情况下
剩下的七位只要取反加一就能算出值了
原数: 10011100
去掉符号位: 0011100
取反: 1100011
加一: 1100100
1100100转成十进制就是100
加上前面的负号
所以结果是-100

这个int转换为char没关系吧

byte占8位,值在-128 ~ 127之间
67 = 01000011
89 = 01011001
两者相加等于10011100,而10011100是-100在计算机内的表示形式(-100的补码是10011100)

嗯,不大明白楼主的意思的。

楼上说了67+89的结果的二进制是10011100,而这个值就是-100,为什么是-100呢?
要对一个负数的二进制进行解码,首先对其所有的位取反,然后加1。
10011100取反01100011,然后+1,01100100,1100100的十进制就是100了,然后还是个负数,就是-100了。

i1 +i2 = 156 他们得到的156这个结果是int型的,
已经超出了byte的范围
将156强转成byte,所以得到是-100

byte类型只能表达到128,你那两个值相加之后超出了BYTE的范围。改为INT型在试吧

我调试了下,的确是 -100