如何在 Java 中使用十六进制作为十六进制值

How to use hex as hex values in Java

问题

我想用 Java 执行位运算,并期望与 C 或 C++ 发生的行为相同。但是它没有按预期工作。

C 或 C++

printf("%d", 0 > 0xFFFFFFFF);

这会 return 0(这是错误的)

然而在Java

System.out.println(0 > 0xFFFFFFFF);

returns true

我的理解

我知道 2 的补码是如何工作的。下面是我在猜测这两种语言内部发生的事情。

问题

有没有什么方法可以让 Java 像 C++ 或 C 那样工作? 我希望 Java 的十六进制值被识别为十六进制值,而不是将它们转换为有符号整数值?

在Java中,字面值0xFFFFFFFF表示值为-1的int。在 Java int 中是有符号类型。

在 C / C++ 中 0xFFFFFFFF 通常是 或者 一个 long 或者 一个 unsigned long.在前一种情况下,它代表-1。在后一种情况下,它表示 2^32 - 1 ... 一个非常大的正整数。


Is there any possible way that Java can work just like C++ or C did?

没有

I would like Java's hex values to be recognized as hex values instead of converting them into signed int values?

问题是 Java int 已签名。你无法改变这一点。

但是,Integer class 中的一些方法会将 int 视为未签名的 ;例如Integer.compareUnsigneddivideUnsignedparseUnsignedInt。有关详细信息,请参阅 javadocs