有符号左移右移(<< >>负数操作的是补码)
1.左移n位表示乘以2^n(补0)
例如:0001(1)<<1=0010(2)
0101(5)<<1=1010(10)
1001(-1)<<1:1111(补码)1110(左移)1101(反码)=1010(原码-2)
2.右移n位表示除以2^n(正数补0、负数补1)
例如:01010(10)>>1=00101(5)
01010(10)>>2=00010(2)%属于整除,抛弃余数
10100(-4)>>2:11100(补码)11111(右移)11110(反码)=10001(原码-1)
3.左移n位溢出减去相应值即可
例如:1010(10)<<1=0100(4)=1 010(20)-1 0000(16)=4
1010(10)>>2=0010(2)%属于整除,抛弃余数
无符号左移右移(>>> <<<)
1.负数右移n位时(正数补0、负数补0,感觉没有什么意义)
例如:1000 0100(-4)>>>2:1111 1100(补码)1001 1111(右移)1001 1110(反码)=1 110 0001(原码)