如何在 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 的补码是如何工作的。下面是我在猜测这两种语言内部发生的事情。
- C++ 或 C 只是将
0xFFFFFFFF
翻译成 0xFFFFFFFF
本身,因此值 0
小于 0xFFFFFFFF
从而导致 false
.
- Java 将
0xFFFFFFFF
与 2 的补码转换为 -1
,因此值 0
大于 -1
,从而导致 true
。
问题
有没有什么方法可以让 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.compareUnsigned
、divideUnsigned
和 parseUnsignedInt
。有关详细信息,请参阅 javadocs。
问题
我想用 Java 执行位运算,并期望与 C 或 C++ 发生的行为相同。但是它没有按预期工作。
C 或 C++
printf("%d", 0 > 0xFFFFFFFF);
这会 return 0
(这是错误的)
然而在Java
System.out.println(0 > 0xFFFFFFFF);
returns true
我的理解
我知道 2 的补码是如何工作的。下面是我在猜测这两种语言内部发生的事情。
- C++ 或 C 只是将
0xFFFFFFFF
翻译成0xFFFFFFFF
本身,因此值0
小于0xFFFFFFFF
从而导致false
. - Java 将
0xFFFFFFFF
与 2 的补码转换为-1
,因此值0
大于-1
,从而导致true
。
问题
有没有什么方法可以让 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.compareUnsigned
、divideUnsigned
和 parseUnsignedInt
。有关详细信息,请参阅 javadocs。