我正在阅读示例,试图了解如何将有符号字节转换为无符号整数计数器部分。
我遇到的最流行的方法是:
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/