有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

位操作移位负大整数值Java

我试图将一个7字节的数组右移7位

为此,我使用BigInteger的shiftright方法。然而,当为负大整数右移时,会添加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:

11101000011010100000011011110101001110010010000100

当移位时,我得到二进制的D0CA06F538C8:

1101000011000000001101111010100111100011001000

正如你所看到的,它已经向右移动了7位,但是前导位已经被剥离

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

100100001011001100010010101000101000101000101101111001000011000

以二进制形式生成FF213312A346F2:

11111111 001000010110011000100101010001010001011011110010

这一次,大约7 1的已填充在开始

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

非常感谢 湿婆


共 (0) 个答案