Java中使用无符号基本数据类型

本文详细解释了如何在Java中使用无符号基本数据类型,通过将有符号类型转换并保留最后8位来实现。包括了字节类型转换、强制类型转换原理以及保留无符号范围的方法。

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

Java中使用无符号基本数据类型

我们都知道Java的整形数据类型都是有符号的,并没有提供无符号数据类型。但是可以通过特殊的方法,可以让我们使用无符号数据类型。

比如byte类型范围是-128 - 127,如果存在无符号byte类型,那么范围应该是0-255,为了保存更大的范围的数,我们可以使用比byte类型范围大的数据类型保存byte值。然后只保留最后8位并将其他位置的2进制置0(& 0xff)就可以了。
如下所示

byte byteNum = (byte)255;  // byteNum == -1;
int intNum = (int)byteNum;  // intNum == -1;
int UnByteNum = intNum & 0xff; // UnByteNum = 255;

第一行代码:
255(int)-> 1111 1111
1111 1111 最高位是1,所以值为负。具体的值为补码值
1111 1111 按位取反 0000 0000
0000 0000 + 1 -> 0000 0001 表示1
所以,byteNum = -1;

第二行代码:
byteNum为1111 1111
intNum 范围是 -2^31 - 2^31 - 1,所以需要补位。
强制类型转换中,若被转换的数最高位为1,则补1,否则补0。
intNum: 1111 1111 1111 1111 1111 1111 1111 1111
同理求补码,值为-1

第三行代码:
通过位运算,保留最后8位,其他位置0。

更简洁的写法:

byte byteNum = (byte)255;
int unByteNum = byteNum & 0xff;

0xff是整型,byte类型与int做运算会发生自动类型转换,精度低的自动转换为精度高的。
所以实质上与上面的代码一样。

除此之外,如果一个保存了byte值得整形变量与其他非byte值得变量做运算后,不要忘了”& 0xff”。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值