我有一个包含两个字节的Java BigInteger(例如:1000000100110111)。我想只将一个半字节,左边字节中最右边的半字节(下面用粗体)向左移一位:
1000 0001 00110111
转变后的结果:
1000 0010 00110111
有关最佳方法的任何想法吗?
谢谢, 克里斯
答案 0 :(得分:3)
如果你只想换一个位,你应该清除旧的并设置新的:
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(注意溢出),您可以在移位之前再次应用位图,或者。或者