由于某些原因,以下两个按位运算提供了不同的结果,但由于使用的掩码应该相同,所以它们应该提供相同的结果似乎很直观。我在这里错过了什么?为什么使用这两种口罩的结果会有所不同?按位运算符的输出之间的差别
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