您的位置:首页 > 编程语言 > Java开发

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

2015-11-04 11:59 507 查看

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”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据类型 java