<<、>>、>>>是三种位运算符:
<< 左移运算符,num << n,相当于num乘以2的n次幂
>> 右移运算符,num >> n,相当于num除以2的n次幂
>>> 无符号右移,忽略符号位,空位都以0补齐(只对32位和64位有意义)
现在我们知道了这几个运算符大概是做什么的,再来看看例子:
首先我们需要知道十进制怎么转二进制,正数这里就不解释了,我们看看负数的情况:
以 -9 为例子: 9的二进制是 1001,再按位取反,即0110,再加一得到0111。-9的二进制就是0111了。
(1) << 运算符 ,a << b,二进制左移b位后,低位补0
9 << 2 0000 0000 0000 0000 0000 0000 0000 1001
左移两位 0000 0000 0000 0000 0000 0000 0010 0100
即十进制36
-9 << 2 1111 1111 1111 1111 1111 1111 1111 0111
左移两位 1111 1111 1111 1111 1111 1111 1101 1100
减一取反 0000 0000 0000 0000 0000 0000 0010 0100 即十进制-36
(2)>>运算符,a >> b,二进制右移b位,低位去掉,正数时高位补0,负数时高位补1
9 >> 2 0000 0000 0000 0000 0000 0000 0000 1001
右移两位 0000 0000 0000 0000 0000 0000 0000 0010(高位补0)
即十进制2
-9 >> 2 1111 1111 1111 1111 1111 1111 1111 0111
右移两位 1111 1111 1111 1111 1111 1111 1111 1101(高位补1)
减一取反 0000 0000 0000 0000 0000 0000 0000 0011 即十进制-3
(3)>>>运算符,a >>> b,无符号右移,只对32位和64位有意义,二进制右移b位,低位去掉,正数和负数高位都补0
9 >>> 2 0000 0000 0000 0000 0000 0000 0000 1001
右移两位 0000 0000 0000 0000 0000 0000 0000 0010(高位补0)
即十进制2
-9 >>> 2 1111 1111 1111 1111 1111 1111 1111 0111
右移两位 0011 1111 1111 1111 1111 1111 1111 1101(高位补0)
即十进制1073741821