吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3960|回复: 9
收起左侧

[Java 转载] Java-关于强制转换数据溢出后的结果的问题

[复制链接]
War-Horse 发表于 2017-7-26 00:58
今晚做了一个关于强制类型转换数据溢出后的结果的练习题,发现控制台输出的结果和自己手动算出来的结果不一样,查看了几次没有发现错误原因,所以到论坛请教各位前辈!这是程序
[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);
                
        }
}

下面是我手动计算的步骤
步骤.png

控制台输出结果

控制台输出结果


最后我的计算结果是84,而通过控制台输出的结果是44.究竟是哪一步出了问题,求指正!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| War-Horse 发表于 2017-7-26 08:54
找到问题所在了,最后那一步,求原码那步。我忽略了一个点,就是符号位是正的,原反补相同。
SeriousSnow 发表于 2017-7-26 01:11
300 是 0  ....100101100
byte类型么
0 0101100
不就是44
wolf豪 发表于 2017-7-26 01:17
byte不是8字节嘛,然后取前八位,0 0101100   32+8+4=44
chenny 发表于 2017-7-26 02:34
直接取300 化成2进制的后8位 算出来就44.
后8位开头第一位是0,说明是正数,你还算补码什么的干嘛
qianeymax6274 发表于 2017-7-26 03:10
太给力了,谢谢兄弟们
 楼主| War-Horse 发表于 2017-7-26 08:40
SeriousSnow 发表于 2017-7-26 01:11
300 是 0  ....100101100
byte类型么
0 0101100

这...  计算机运算数据是用补码运算的,所以得到300的二进制还要求出它的补码,将补码运算完了之后再表现成原码,得出强制类型转换后的二进制。
 楼主| War-Horse 发表于 2017-7-26 08:41
wolf豪 发表于 2017-7-26 01:17
byte不是8字节嘛,然后取前八位,0 0101100   32+8+4=44

byte是一个字节,有8 bit。你这样算就跟上面的评论一样
 楼主| War-Horse 发表于 2017-7-26 08:43
chenny 发表于 2017-7-26 02:34
直接取300 化成2进制的后8位 算出来就44.
后8位开头第一位是0,说明是正数,你还算补码什么的干嘛

这个练习题主要就是测试整个运算过程,所以需要按照上面的步骤来,上面的步骤就是模仿计算机是如何处理这个数据的
SeriousSnow 发表于 2017-7-26 10:07
War-Horse 发表于 2017-7-26 08:40
这...  计算机运算数据是用补码运算的,所以得到300的二进制还要求出它的补码,将补码运算完了之后再表现 ...

要死了,正数补码原码有区别吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 19:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表