2

2 バイトを含む Java BigInteger があります (例: 1000000100110111)。左バイトの右端のニブル (下の太字) を 1 ビットだけ左にシフトしたいと思います。

1000 0001 00110111

シフト後の結果の作成:

1000 0010 00110111

これを行う最善の方法について何か考えはありますか?

ありがとう、クリス

4

1 に答える 1

3

1 ビットだけシフトしたい場合は、古いものをクリアして新しいものを設定する必要があります。

bigint.clearBit(n-1)
      .setBit(n)

これらを左端の 4 ビットの隣にシフトしたい場合は、それらをビットマップ アウトし、シフトしてから、または元に戻すことができます。

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 に答える