2 バイトを含む Java BigInteger があります (例: 1000000100110111)。左バイトの右端のニブル (下の太字) を 1 ビットだけ左にシフトしたいと思います。
1000 0001 00110111
シフト後の結果の作成:
1000 0010 00110111
これを行う最善の方法について何か考えはありますか?
ありがとう、クリス
2 バイトを含む Java BigInteger があります (例: 1000000100110111)。左バイトの右端のニブル (下の太字) を 1 ビットだけ左にシフトしたいと思います。
1000 0001 00110111
シフト後の結果の作成:
1000 0010 00110111
これを行う最善の方法について何か考えはありますか?
ありがとう、クリス
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 の前にシフトされたビットマップに再度ビットマップを適用できます。