我正在阅读示例,试图了解如何将有符号字节转换为无符号整数计数器部分。

我遇到的最流行的方法是:

a & 0xFF


其中a是有符号字节。

我的问题是为什么0xFF存储为无符号?是否所有十六进制值都存储为无符号?如果可以,为什么?

以及“与”运算如何关闭符号整数中的符号位?

如果有人可以逐步分解过程,那就太好了。

最佳答案

您可能在将字节转换为整数的代码中看到了这一点,他们希望将字节视为0-255范围内的无符号值。通常,它不适用于整数。如果要使整数a为“无符号”,则可以执行以下操作:

int unsignedA = a & 0x7FFFFFFF;


这将确保unsignedA为正-但这是通过切掉高位来实现的,例如,如果a为-1,则unsignedA为Integer.MAX_VALUE

由于Java中没有32位无符号整数的数据类型,因此无法将32位有符号Java整数转换为32位无符号Java整数。 Java中唯一的无符号整数数据类型为16位长:char

如果要在Java中存储32位无符号整数值,则需要将其存储在long中:

long unsignedA = a & 0xFFFFFFFFL;

关于java - java-为什么0x000F存储为无符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35192878/

10-14 18:49
查看更多