为什么 java 在更改基数之前将数字转换为负数
Why java is converting number to negative before change of radix
在 Java String Integer::toString(long i, int radix)
returns 中使用给定的基数 i
表示。在进行转换之前,它会将数字 i
映射到 -i
:
byte[] buf = new byte[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative) {
i = -i;
}
while (i <= -radix) {
buf[charPos--] = (byte)Integer.digits[(int)(-(i % radix))];
i = i / radix;
}
buf[charPos] = (byte)Integer.digits[(int)(-i)];
我不明白为什么它适用于负数而不是正数。在 Java x % y = -((-x) % y)
中,这让我感到困惑,因为它不应该有任何区别,因为模运算的结果在代码中被取反了。
代码不希望对正值和负值进行不同的处理,所以希望统一符号。
最明显的规范化是将负值转换为正值。这就是我们人类会做的。但是,对于以补码形式存储的数字,负数的 取值范围 比正数的取值范围大一个,因此如果我们归一化为正数,则 [=10] 会失败=],又名 Integer.MIN_VALUE
.
在 Java String Integer::toString(long i, int radix)
returns 中使用给定的基数 i
表示。在进行转换之前,它会将数字 i
映射到 -i
:
byte[] buf = new byte[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative) {
i = -i;
}
while (i <= -radix) {
buf[charPos--] = (byte)Integer.digits[(int)(-(i % radix))];
i = i / radix;
}
buf[charPos] = (byte)Integer.digits[(int)(-i)];
我不明白为什么它适用于负数而不是正数。在 Java x % y = -((-x) % y)
中,这让我感到困惑,因为它不应该有任何区别,因为模运算的结果在代码中被取反了。
代码不希望对正值和负值进行不同的处理,所以希望统一符号。
最明显的规范化是将负值转换为正值。这就是我们人类会做的。但是,对于以补码形式存储的数字,负数的 取值范围 比正数的取值范围大一个,因此如果我们归一化为正数,则 [=10] 会失败=],又名 Integer.MIN_VALUE
.