为什么 Java 能够将 0xff000000 存储为 int?

2022-01-14 00:00:00 int hex java

Java 中整数的最大值是 2147483647,因为 Java 整数是有符号的,对吧?

An integer's max value in Java is 2147483647, since Java integers are signed, right?

0xff000000 的数值为 4278190080.

0xff000000 has a numeric value of 4278190080.

但我看到这样的 Java 代码:

Yet I see Java code like this:

int ALPHA_MASK = 0xff000000;

谁能赐教?

推荐答案

高位是符号位.设置它表示一个负数:-16777216.

The high bit is a sign bit. Setting it denotes a negative number: -16777216.

与大多数语言一样,Java 以 2 的补码 形式存储带符号的数字.在这种情况下,从 0x7F000000 或 2130706432 中减去 231 或 2147483648,得到 -16777216.

Java, like most languages, stores signed numbers in 2's complement form. In this case, subtracting 231, or 2147483648 from 0x7F000000, or 2130706432, yields -16777216.

相关文章