gpt4 book ai didi

reverse - Java 的 BigInteger 符号大小如何工作

转载 作者:行者123 更新时间:2023-12-05 03:09:26 27 4
gpt4 key购买 nike

考虑以下代码:

int i = 1;
System.out.println("1 binary: " + Long.toBinaryString(i));
long ri = Long.reverse(i);
System.out.println("1 reverse bit decimal: " + ri);
System.out.println("1 reverse bit binary: "+ Long.toBinaryString(ri));
BigInteger bil = new BigInteger(1, Longs.toByteArray(ri));
System.out.println("1 Sign-Magnitude BigInteger toString: " + bil.toString());

输出是:

1 binary: 1
1 reverse bit decimal: -9223372036854775808
1 reverse bit binary: 1000000000000000000000000000000000000000000000000000000000000000
1 Sign-Magnitude BigInteger toString: 9223372036854775808

谁能帮忙解释为什么“1 Sign-Magnitude BigInteger toString:”的值是 9223372036854775808 (2^63)?

最佳答案

要获得一个值的符号大小,您只需将其绝对值作为大小并记住单独位(或字节)中的符号。

例如,722 的符号幅度表示很简单:

sign = 0
magnitude = 722

-722 的符号大小很简单:

sign = 1
magnitude = 722

这也是 BigInteger 使用的。

您的代码反转一个值,也就是说,8 位值 00000001 (1) 更改为 10000000 (128或 2^7)。这与 inverting 不同,它变成了例如00000001 (1) 到 11111110 (254)。这就是one's complement 的作用。常用的补码00000001(1)取反为11111111(255,即256-1)。您应该阅读有关 two's complement 的内容,这需要一些理解。然而,符号大小非常容易理解(但并不总是很实用——加法、减法对于有符号和无符号等是不同的——这就是为什么大多数处理器使用二进制补码的原因)

再说一遍:s​​ign-magnitude 是这样工作的:

sign = (n < 0)
magnitude = abs(n)

关于reverse - Java 的 BigInteger 符号大小如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42797262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com