为什么-1>>3 = -1,-1>>>3 = 536870911?
>>运算符:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
>>>运算符:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。其他结构和>>相似。
二进制的大神。
------解决思路----------------------
public static void main(String[] args) {
//-1>>3 = -1,-1>>>3 = 536870911
//1、取-1的绝对值1的二进制00000000000000000000000000000001(以4个字节表示)
//2、取1的反码11111111111111111111111111111110
//3、取-1的二进制11111111111111111111111111111111(反码+1)
//4、>>有符号右移3为,最后得到的结果11111111111111111111111111111111(换位10进制还是为-1)
//5、>>>无符号右移,最后得到的结果00011111111111111111111111111111(等比数列求和2^29,结果为536870911)
System.out.println(-1>>3);
System.out.println(-1>>>3);
System.out.println("-1的二进制代码:"+Integer.toBinaryString(-1));
System.out.println("-1有符号右移3位的二进制码:"+Integer.toBinaryString(-1>>3));
System.out.println("-1无符号右移3位的二进制码:"+Integer.toBinaryString(-1>>>3));
String strUnsigned="000"+Integer.toBinaryString(-1>>>3);
BigInteger resultHex= new BigInteger(strUnsigned,2);
System.out.println("-1无符号右移3位的十进制:"+resultHex);
}