<<左移:相当于乘法。a << b = a * (2^b)
比如:
1 << 5,相当于1 × (2^5) = 32
1 << 0,相当于1 × (2^0) = 1
>>右移:相当于除法。a >> b = a / (2 ^ b)
比如:
16 >> 3,相当于16 / (2^3) = 2
与普通 / 相同, 16 >> 5的结果为0
举例
十进制:100
二进制:00000000 00000000 00000000 01100100
整型是4字节32位,将100以整型的二进制表示
100 >> 2
二进制: 00000000 00000000 00000000 00011001 | 00 解释: | 后面被剔除,前面缺少的两个补0 结果: 25 右移两位相当于除以2,再除以2,结果为25
100 << 2 二进制: 00 | 00000000 00000000 00000001 100100 00 解释: | 前面被剔除,后面缺少的两个补0 结果: 400 左移两位相当于乘以2,再乘以2,结果为400
总结
-
负数有符号右移高位补1
-
负数无符号右移高位补0
-
位移是一个取余得过程
-
无符号右移无论正负高位添0