何らかの理由で、次の2つのビット単位の演算で異なる結果が得られますが、使用するマスクが同じである必要があるため、同じ結果が得られるはずです。私はここで何が欠けていますか?なぜ2つのマスクを使用した結果が異なるのですか?生産ビット単位の演算子の出力の差
public class BitShiftTest {
private long bitString = -8784238533840732024L ;
private final int MAX_BITS_POSITION = 63 ;
public static void main(String[] args) {
BitShiftTest bst = new BitShiftTest() ;
System.out.printf("Before applying mask: %s\n", Long.toBinaryString(bst.bitString));
System.out.printf("Using Mask 1: %s\n", Long.toBinaryString(bst.clearBitMask(60)));
System.out.printf("Using Mask 2: %s\n", Long.toBinaryString(bst.clearBitMaskAlternative(60)));
}
public long clearBitMask(int position) {
return bitString & ~(1 << position) ;
}
public long clearBitMaskAlternative(int position) {
return bitString & (0x8000000000000000L >>> MAX_BITS_POSITION - position) ;
}
}
結果は
Before applying mask: 1000011000011000000111011001100000101000001000000000000010001000
Using Mask 1: 1000011000011000000111011001100000101000001000000000000010001000
Using Mask 2: 0
あなたが最初に 'bitString'を変更しないでくださいコール? – qxz
申し訳ありません。私は、 'clearBitMask ...'関数のビットストリングの修正を取り除いていたはずですが、私はまだまだ同じ結果になっています – reayn3
正確な結果は? – RealSkeptic