在Java BigInteger中移动一个半字节?

时间:2012-06-20 22:10:58

标签: java bit-manipulation bit-shift

我有一个包含两个字节的Java BigInteger(例如:1000000100110111)。我想只将一个半字节,左边字节中最右边的半字节(下面用粗体)向左移一位:

1000 0001 00110111

转变后的结果:

1000 0010 00110111

有关最佳方法的任何想法吗?

谢谢, 克里斯

1 个答案:

答案 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(注意溢出),您可以在移位之前再次应用位图,或者。或者