位运算中的右移分为算术右移(>>)和逻辑右移(>>>)。 在进行算术右移时,最高位补符号位;而在进行逻辑右移时,最高位补0。 如果这里使用的算术右移,那么对于像-1这样的负数,不论进行多少次右移操作都不可能变成0,所以会造成死循环。
算术左移(<<)、右移(>>)主要用来进行有符号数的倍增、减半; 逻辑左移(<<<)、右移(>>>)主要用来进行无符号数的倍增、减半。(左移都是低位补0,算数右移高位补符号位,逻辑右移高位补0)