java高位转低位注意事项,int转 short/byte溢出过程

对上述代码的输出结果有没有人觉得是89呢,现实中看见不少直接使用java保留字进行强制高位转低位的。

上述代码输出结果是21。

我们都只知道int类型占用的是32位,4字节,byte类型是占用一字节共八位,因此有符号byte最大存储的数值是127。

从32位int强制转换成byte类型必定要舍去高位的24位,只保留低八位。

123456789变成21的大致过程如下:

1:   123456789对应的二进制(原码)是:00000111     01011011    11001101    00010101

2:在计算机组成原理课程中我们知道数字在计算机中是以补码的方式存储,正数补码和原码一样,负数补码为原码除去符号位(最高位为符号位)之外其它位按位取反再加一,因此123456789取低八位得到的补码就是00010101,因为得到的低八位的最高位是0,因此是正数,我们直接将其转换为10进制就得到了21。

从上述过程我们可以知道正数高位强制转换成低位可能出现正数变成负数的情况,因此需要谨慎将整数当成字符串类似处理 ,除非一个高位整数我们能确定强制类型转换后不会舍去非零位,并且不会整数变成负数。如:

short a = 4;   (00000000   00000100)

byte b = (byte) a; (取低八位得到00000100)

得到的数值依然是4。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值