当数值左移、右移时,先将数值转化为其补码形式,移完后,再转换成对应的原码
正数的原码、反码、补码都是一样的
左移<<:最左侧位的不要,在最右侧补0
左移相当于乘法,左移几位相当于乘以2的几次方
例如:
int a = 10;int b = a<<1;
10的八位二进制表示形式为:0000 1010
当左移1位时,最左侧位不要,在最右侧补0:0001 0100,此时值为:20;即10*2^1 = 20
注意:左移是丢弃的是符号位,所以正数左移可能会变成负数
右移>>:最右侧位不要,在最左侧补符号位
右移相当于除法,右移几位相当于除以2的几次方
例如:
int a = 10;int b = a>>1;
当右移1位时,最右侧位不要,此时a的值为正数,所以在最左侧补0:000 0101,此时值为:5;即10➗2^1 = 5
特列:-1右移仍然是-1(-1的补码:1111 1111)
无符号右移>>>:最右侧位不要了,在最左侧补0
没有无符号左移!!!