由於某些原因,以下兩個按位運算提供了不同的結果,但由於使用的掩碼應該相同,所以它們應該提供相同的結果似乎很直觀。我在這裏錯過了什麼?爲什麼使用這兩種口罩的結果會有所不同?按位運算符的輸出之間的差別
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