java中整型数据转换深入解析

本文深入解析Java中整型数据转换的原理,通过实例演示int型强制转换为short型时高位数据丢失的过程,以及short型赋值给int型的具体表现。文章还详细解释了运算符两边为int型和short型时的位与运算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中整型数据转换深入解析

下面我会用几个例子讲解转换的原理

int型强转short

这种强转是不推荐的,会导致高位数据丢失,浮点型会导致精度丢失。但是既然有这种方法,说明它是有存在的必要的。

首先看下面的情况:

test_level_1

先手算一下结果看看。

/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
正确结果是-1

test_level_1_result

/
下面解释原理
0x7fffffff 的二进制形式为
0111 1111 1111 1111 1111 1111 1111 1111
立即数是int型  int型四个字节  所以是32位 
上面就是Integer.MAX_VALUE的值  是int型的最大值
java中的数值是有符号型的,没有unsigned类型,所以上面的int最大值的最高位为0 表示正数
short类型是短整型  只有2个字节 
所以对0x0fffffff进行强转后的b变量值为 0xffff 截取低地址的2字节 
二进制为 1111 1111 1111 1111 最高位为1  负数  这个是补码形式
转换成十进制就是-1

结论是:字节数多的数据类型(简称高级类型吧)强转为比它字节数少的数据类型(简称低级类型吧)时,截取是从低地址开始的

short型赋值给int型

看下面的情况:

test_level_2

手算下结果看看

/
/
/
/
/
/
/
/
/
/
/
/
/
输出结果是-1

分析一下原理

/
上面已经解释了b变量的值为-1
现在把short类型变量b的值赋给int型变量 intc 
把一个固体球放到一个空间大它一倍的容器中 会发生什么呢  结果显而易见  固体球没变化 容器中多了一个固体球
那么把一个short赋给int,intc的值和b的值在十进制下是完全一致的,都是-1
但是二进制下有区别 b的二进制是       1111 1111 1111 1111
intc的二进制是 1111 1111 1111 1111 1111 1111 1111 1111   

运算符两边是int型和short型

看下面的情况

test_level_3

节省一下篇幅,这里就不用代码块隔开结果了

/
结果是65535

test_level_3_result

分析一下原理

/
b & 0xffff 中的0xffff是立即数 立即数为整型 实际应该为0x0000 ffff 四字节
b自动升级为int 具体值为十进制-1 原理请看上面的例子 十六进制为0xffff ffff

-------------------------具体运算-----------------------------
     0000 0000 0000 0000 1111 1111 1111 1111
b	 1111 1111 1111 1111 1111 1111 1111 1111
					位与
 
结果 0000 0000 0000 0000 1111 1111 1111 1111

注意,这个时候符号位依然是最高位,符号位为0  正数  上面的二进制就是原码 转成十进制就是
65535

以上就是本文全部内容

七夕快乐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tomshidi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值