gpt4 book ai didi

java - 移动负 BigInteger 值 - Java

转载 作者:行者123 更新时间:2023-12-01 21:53:40 24 4
gpt4 key购买 nike

我试图将 7 字节数组向右移动 7 位。

为此,我使用 BigInteger 的右移方法。但是,当负 BigInteger 右移时,会添加 1 填充,有时会删除前导位。

以下是执行移位的代码:

byte[] vcwManD = decryptedVCW;
BigInteger bigIntD = new BigInteger(vcwManD); // create big int array for shift
BigInteger shiftIntD= bigIntD.shiftRight(7); // shift right 7 bits
vcwManD = shiftIntD.toByteArray();

对于二进制字节数组 E865037A9C6424:

11101000011001010000001101111010100111000110010000100100

移位后,我得到二进制形式的 D0CA06F538C8:

110100001100101000000110111101010011100011001000

如您所见,它向右移动了 7 位,但前导位已被去除。

另一个问题是 1 填充。对于二进制字节数组 90998951A37908

10010000100110011000100101010001101000110111100100001000

以二进制形式生成 FF213312A346F2:

11111111001000010011001100010010101000110100011011110010

这次在开头处填充了大约 7 个 1。

有人知道如何解决这个问题吗?

非常感谢西夫

最佳答案

如果您正在进行位移,您可能会使用长无符号值而不是有符号值。因此,当您创建 BigInteger 时,请使用此构造函数:

new BigInteger(1, vcwManD);

这样你就可以保证得到一个正数,并且你应该能够随意改变它而不会产生任何后果。

关于java - 移动负 BigInteger 值 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34753668/

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