定义:
右移动>>:带符号右移。正数右移高位补0,负数右移高位补1。
左移动<<:带符号左移。正数左移低位补0,负数左移低位补1。
无符号右移>>>:无论是正数还是负数,高位通通补0。
栗子:下面以32位表示
2的二进制:0000 0000 0000 0000 0000 0000 0000 0010
-2的二进制:1111 1111 1111 1111 1111 1111 1111 1110
获取2的负数二进制表示:2的二进制补码加1
1111 1111 1111 1111 1111 1111 1111 1101
加1
1111 1111 1111 1111 1111 1111 1111 1110
<1、2>>>1
0000 0000 0000 0000 0000 0000 0000 0010
高位补0 :0000 0000 0000 0000 0000 0000 0000 0001
<2、2>>1
0000 0000 0000 0000 0000 0000 0000 0010
2)高位补0 :0000 0000 0000 0000 0000 0000 0000 0001
<3、-2>>1
1) 去掉红色数字 :1111 1111 1111 1111 1111 1111 1111 1110
2)高位补1 :1111 1111 1111 1111 1111 1111 1111 1111
<4、2<<1
1 ) 去掉红色数字 :0000 0000 0000 0000 0000 0000 0000 0010
2 ) 低位补0 :0000 0000 0000 0000 0000 0000 0000 0100
<5、-2<<1
1 ) 去掉红色数字 : 1111 1111 1111 1111 1111 1111 1111 1110
2 ) 低位补1 : 1111 1111 1111 1111 1111 1111 1111 1101
<6、-2>>>1
1 ) 去掉红色数字 :1111 1111 1111 1111 1111 1111 1111 1110
2 ) 高位补0 :0111 1111 1111 1111 1111 1111 1111 1111
总结:
2>>>1 相当于2乘以2^1 同理2>>>2^n相当于乘以2^n 无符号位操作都补0
2>>1 相当于2乘以2^1 同理2>>>2^n相当于乘以2^n 正数高位补0,负数高位不1
2<<1 相当于2乘以2^1 同理2>>>2^n相当于乘以2^n 正数左移低位补0,负数左移低位补1。
标签:0000,高位,乘以,1111,1110,Java,负数 From: https://blog.51cto.com/u_16091571/6233827