我有一个包含两个字节的 Java BigInteger(例如:1000000100110111)。我只想将一个半字节,即左字节中最右边的半字节(下面以粗体显示)向左移动一位:
1000 0001 00110111
换班后的结果:
1000 0010 00110111
对执行此操作的最佳方法有任何想法吗?
谢谢,克里斯
我有一个包含两个字节的 Java BigInteger(例如:1000000100110111)。我只想将一个半字节,即左字节中最右边的半字节(下面以粗体显示)向左移动一位:
1000 0001 00110111
换班后的结果:
1000 0010 00110111
对执行此操作的最佳方法有任何想法吗?
谢谢,克里斯
如果您只想移动一位,您应该清除旧的并设置新的:
bigint.clearBit(n-1)
.setBit(n)
如果你想移动最左边的四个位,你可以将它们位映射出来,移动它们,然后或者它们回来:
bigint.and(0xf0ff).or(bigint.and(0x0f00).shiftLeft(1))
或者为了清楚起见:
unshifted = bigint.and(0xf0ff);
shifted = bigint.and(0x0f00).shiftLeft(1);
result = unshifted.or(shifted);
如果您不希望 1100 1111 变为 1101 1110(注意溢出),您可以在 or 之前再次将位图应用于移位的位置。