为了账号安全,请及时绑定邮箱和手机立即绑定

javaday01-6 强制类型转换数据溢出后的结果的算法

标签:
Android

继续被吞...验证码就是狗,这次没有复制,GG。。。

 

byte b = 130;  有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

         因为byte的范围是:-128到127。而130不在此范围内,所以报错。

         我们可以使用强制类型转换

         byte b = (byte) 130;

分析过程:

                  我们要想知道结果是什么,就应该知道是如何进行计算的。

                  而我们又知道计算机中数据的运算都是补码进行的。

                  而要得到补码,首先要计算出数据的二进制。

                 

                  A:获取130这个数据的二进制。因为130默认转换为int类型,所以是4个字节:

                            00000000 00000000 00000000 10000010

                            这是130的原码,也是反码,还是补码。

                  B:做截取操作,截成byte类型。

                            10000010 

                            这个结果是补码。

                  C:已知补码求原码。

                                              符号位              数值位

                            补码:     1                         0000010

                           

                            反码:     1                         0000001

                           

                            原码:     1                         1111110

 

 

练习:byte b = (byte)300;

 

分析过程:

                  求得300这个数据的二进制。int类型,4个字节:

                  00000000 00000000 00000001 00101100

                  截取:

                  00101100 为正数,所以补码也是一样的

                  结果:44

                 

超过数值后依旧进行强制转换,有一个有趣的现象:

[代码]xml代码:

?

1

2

3

4

5

6

7

8

byte b1 = 127;

byte b2 = (byte)128;  //-128

byte b3 = (byte)129;  //-127

byte b4 = (byte)130;  //-126

 

byte的范围是 -128~127

128: 10000000

-128:10000000 (这里的1即是符号位,也是数值位)

原文链接:http://www.apkbus.com/blog-833059-61604.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消