2

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

1000 0001 00110111

换班后的结果:

1000 0010 00110111

对执行此操作的最佳方法有任何想法吗?

谢谢,克里斯

4

1 回答 1

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(注意溢出),您可以在 or 之前再次将位图应用于移位的位置。

于 2012-06-20T22:14:06.700 回答