强制类型转换

这是对于127+1
强制类型转换的结果是-128的原因的描述

byte b = 127 + 1;//这样写报错:Type mismatch: cannot convert from int to byte
所以必须强制类型转换:
byte b = (byte) (127 + 1);

因此就能理解为什么是-128了:
int型的127在计算机内的二进制是:
0000 0000 0000 0000 0000 0000 0111 1111
加1后变成:
0000 0000 0000 0000 0000 0000 1000 0000
即128
强制转换后截取低8位变成
1000 0000
这是byte类型-128的补码。
这是对于-129强制类型转换为byte的结果
1. int类型一般是4个字节,一个字节有8位,这样int型数据二进制的完整形式有32位,而byte表示一个字节,于是byte类型数据二进制的完整形式有8位。
2. 二进制数据在计算机内是以二进制存储的,要注意一点,计算机在存储某个数据时,是存储的数据的补码,说明一下补码与原码关系,正数补码与原码相同,负数补码是原码减1后取反。
3. 根据上面阐述,129的原码是00000000 00000000 00000000 10000001 ,负数最高位取1,那么-129便是10000000 00000000 00000000 10000001 ,补码计算:减1为10000000 00000000 00000000 10000000 ,再取反为11111111 11111111 11111111 01111111(最高位是符号位,不参与取反),现在转换为byte,只有8位,于是只能保留低8位,前面24位丢去,得到01111111,这就对应着十进制的127.
反正我看着有点绕,一 是对计算结果(补码)求原码 得到结果-128

-129的补码其实就是
11111111 11111111 11111111 01111111
所以两者都是对于补码在进行操作,然后计算结果需要换算成原码
这里第二点计算补码的步骤和先取反末位加1有一点不同 结果是一样的
得出的心得是,数据储存在计算机中,或者说只要参与运算(byte)也是运算,都是补码形式,最终被类型转换是在补码的基础上,然后得出结果再反算出原码,才是输出的结果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值