位操作移位负大整数值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) 个答案