位运算笔记:
>> 右移位 运算数向右移出若干位 ,移出的右端比特值舍弃,左端补原符号位的值。
<< 左移位 运算数向左移出若干位,移出的左端高位比特值舍弃,右端低位补零。
>>>按位右移且补零 运算数向右移出若干位,移出的右端比特值舍弃,左端补零。
public
class
BasicMath
...
{ public static void main(String[] args) ...{ System.out.println(17>>3);//2 System.out.println(17<<3);//136 System.out.println(-17>>3);//-3 System.out.println(-17<<3);//-136 System.out.println(-17>>>3);//536870909 }}
计算机中存放数据都是以补码形式,正数的原码和补码相同,负数的补码是其反码加1。
17 (int类型占32位)的原码补码:
0000 0000 0000 0000 0000 0000 0001 0001
0000 0000 0000 0000 0000 0000 0001 0001(17>>3=2)
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0001 0001(17<<3=136)
0000 0000 0000 0000 0000 0000 1000 1000
-17的反码:
1111 1111 1111 1111 1111 1111 1110 1110
-17补码:(反码+1)
1111 1111 1111 1111 1111 1111 1110 1111
1111 1111 1111 1111 1111 1111 1111 1101(-17>>3=-3)
1111 1111 1111 1111 1111 1111 0111 1000 (-17<<3=-136)
0001 1111 1111 1111 1111 1111 1111 1101 (-17>>>3=536870909)