左移操作符<<, 右移又叫做“有符号”右移-》符号若为正,则在最高位插入0,符号若为符则在最高位插入1;
不论对于正数还是负数<<i 就等于该数乘以2^i (这里保证不超数据类型)
而对于右移操作来说就有些奇葩复杂了:
首先右移不会改变符号位:
正数右移就是对他的二进制原码右移然后补零的操作;
而负数就麻烦了,首先负数的右移是对其补码的右移然后补1的过程:
例如-3>>1
源码:1(符号位)0000000000000000000000000000011
反码:1(符号位)1111111111111111111111111111100
补码:1(符号位)1111111111111111111111111111101
右移一位前边补1:1(符号位)1111111111111111111111111111110
然后还原:-1的: 1(符号位)1111111111111111111111111111101
取反: 1(符号位)0000000000000000000000000000010
得:-2