找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 125|回复: 0

Java 中的补零扩展和补符号位扩展

[复制链接]

373

主题

55

回帖

1944

积分

管理员

积分
1944
发表于 2021-6-7 23:02:13 | 显示全部楼层 |阅读模式
在Java 中整数类型都是有符号的,由低位往高位扩展的时候,默认是通过补符号位扩展,从而保证十进制数值不变。
符号位扩展,对于负数,在保留符号位为最高位,其余位数用1填充,对于整数,跟补零扩展是一样的,其余的位数全部用0填充


借用其他文章的总结:
引用:
https://blog.csdn.net/qq_35559358/article/details/78964089?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

因为Java中只有有符号数,当byte扩展到short, int时,即正数都一样,因为符号位是0,所以无论如何都是补零扩展;但负数补零扩展和按符号位扩展结果完全不同。

补符号数,原数值不变。

补零时,相当于把有符号数看成无符号数,比如-127 = 0x81,看成无符号数就是129, 256 + (- 127)。

对于有符号数,从小扩展大时,需要用&0xff这样方式来确保是按补零扩展。

而从大向小处理,符号位自动无效,所以不用处理。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2024-9-20 10:56 , Processed in 0.024212 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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