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

来源:互联网 发布:手机ppt制作软件 编辑:程序博客网 时间:2024/05/07 08:05

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”。

0 0
原创粉丝点击