移位(二进制)操作符的符号是:
<< 左移操作符
>> 右移操作符
移位操作符的操作数只能是整数
而操作的是一个数的二进制
而一个整数的二进制表示形式有三种:原码,反码,补码
例:10的二进制表示为1010
而整形占四个字节(32个bite位)
也就是00000000000000000000000000001010————原码(正数的原码反码和补码相同)
例:-10的二进制表示为
10000000000000000000000000001010————原码
11111111111111111111111111110101————反码
11111111111111111111111111110110————补码
三者关系为:
原码->反码 符号不变,其他位按位取反
反码->补码 +1
补码->反码 -1
反码->原码 取反
补码->原码 取反,+1
而区分一个数为正还是负,看最高位,也就是第一位,0则是正数,1则是负数
而内存中存储的起始是:补码的二进制
所以参与移位的是补码
<< 左移
以10为例
原码00000000000000000000000000001010
左移后0|00000000000000000000000000010100
最左边移出来的舍弃,末尾补零,负数也同样计算
>>右移
以10为例
00000000000000000000000000001010———原码
右移后00000000000000000000000000000101|0
最右边舍弃,一般来说,左边补的是符号位