Java-关于强制转换数据溢出后的结果的问题
今晚做了一个关于强制类型转换数据溢出后的结果的练习题,发现控制台输出的结果和自己手动算出来的结果不一样,查看了几次没有发现错误原因,所以到论坛请教各位前辈!这是程序class DataTypeDemo7HomeWork {
public static void main(String[] args) {
//练习:byte b = 300;
//byte的范围是:-128~127
//300不在byte的范围内,所以报错。
//byte b = 300;
byte b = (byte) 300;
//那么,将int类型的300强制转换成byte类型后的输出结果是...
System.out.println(b);
}
}
下面是我手动计算的步骤
最后我的计算结果是84,而通过控制台输出的结果是44.究竟是哪一步出了问题,求指正! 找到问题所在了,最后那一步,求原码那步。我忽略了一个点,就是符号位是正的,原反补相同。 300 是 0....100101100
byte类型么
0 0101100
不就是44 byte不是8字节嘛,然后取前八位,0 0101100 32+8+4=44 直接取300 化成2进制的后8位 算出来就44.
后8位开头第一位是0,说明是正数,你还算补码什么的干嘛 太给力了,谢谢兄弟们 SeriousSnow 发表于 2017-7-26 01:11
300 是 0....100101100
byte类型么
0 0101100
这...计算机运算数据是用补码运算的,所以得到300的二进制还要求出它的补码,将补码运算完了之后再表现成原码,得出强制类型转换后的二进制。 wolf豪 发表于 2017-7-26 01:17
byte不是8字节嘛,然后取前八位,0 0101100 32+8+4=44
byte是一个字节,有8 bit。你这样算就跟上面的评论一样 chenny 发表于 2017-7-26 02:34
直接取300 化成2进制的后8位 算出来就44.
后8位开头第一位是0,说明是正数,你还算补码什么的干嘛
这个练习题主要就是测试整个运算过程,所以需要按照上面的步骤来,上面的步骤就是模仿计算机是如何处理这个数据的 War-Horse 发表于 2017-7-26 08:40
这...计算机运算数据是用补码运算的,所以得到300的二进制还要求出它的补码,将补码运算完了之后再表现 ...
要死了,正数补码原码有区别吗?
页:
[1]