我正在阅读示例,试图了解如何将有符号字节转换为无符号整数计数器部分。
我遇到的最流行的方法是:
a & 0xFF
其中 a
是带符号的字节。
我的问题是为什么 0xFF 存储为无符号?所有十六进制值都存储为无符号吗?如果是,为什么?
“and”-ing 如何关闭符号整数中的符号位?
如果有人能一步一步地分解这个过程就太好了。
最佳答案
您可能在将字节转换为整数的代码中看到了这一点,他们希望将字节视为 0-255 范围内的无符号值。它一般不适用于整数。如果你想让一个整数a
“无符号”,你可以这样做:
int unsignedA = a & 0x7FFFFFFF;
这将确保 unsignedA
为正 - 但它通过切断高位来实现,例如,如果 a
为 -1,则 unsignedA 为 Integer.MAX_VALUE
。
无法将 32 位有符号 Java 整数转换为 32 位无符号 Java 整数,因为 Java 中没有 32 位无符号整数的数据类型。 Java 中唯一的无符号整数数据类型是 16 位长:char
。
如果要在Java中存储32位无符号整数值,需要将其存储在long
中:
long unsignedA = a & 0xFFFFFFFFL;
关于java - 为什么 0x000F 存储为无符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35192878/