java 移位运算符

//----左移,结果为原来的值*(2的n次方),n为运算符右侧的数值
System.out.println(3<<4);//结果:48

//-----带符号右移(如果是正数,高位补0,如果是负数,高位补1)
System.out.println(a>>b);//结果:-4
//00000000 00000000 00000000 00010000(16) →
//11111111 11111111 11111111 11101111(反码) →
//11111111 11111111 11111111 11110000(补码,得到-16) →右移2位 →
//11111111 11111111 11111111 11111100(高位全补1)
//11111111 11111111 11111111 11111011(减1) →
//00000000 00000000 00000000 00000100(取反)(得到4,也就是右移后是-4)

//-----无符号右移,无论是正数还是负数,高位都补0
System.out.println(-16>>>2);//结果:1073741820
//00000000 00000000 00000000 00010000(16) →
//11111111 11111111 11111111 11101111(反码) →
//11111111 11111111 11111111 11110000(补码,得到-16) →右移2位 →
//00111111 11111111 11111111 11111100 →
//1073741820(十进制)
System.out.println(Integer.toBinaryString(-16>>>2));//结果:111111111111111111111111111100
原文地址:https://www.cnblogs.com/BonnieWss/p/12101573.html