java - 为什么 0x000F 存储为无符号?

标签 java unsigned

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

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

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/

相关文章:

java - 如何在 cloudfoundry 或其他地方部署 appfuse?

java - 如何编译由 Java 或 C++ 应用程序生成的代码

java - 等待/通知的奇怪 Java 行为

c++ - 如何从 payload unsigned char buf 获取 IP 和 PORT?

c++ - 有符号/无符号比较

SQlite:unix 时间戳的列格式;整数类型

java - graphql-java-tools:空参数与不存在参数

Java:将多维数组转换或引用为一维数组

c - 如何正确地将负数添加到 size_t

c - 如何将无符号 24 位 int 转换为有符号 int 并将符号扩展为 32 位?