3.7.3 移位运算
C语言中的移位运算有逻辑移位和算术移位两种。对于无符号数来说,逻辑移位比较方便,因为逻辑移位无须考虑符号位的问题。左移时,高位移出,低位补0;右移时,低位移出,高位补0。而对于带符号数来说,算术移位比较合适。左移时,高位移出,低位补0;右移时,低位移出,高位补符号。
可见,对于无符号数移位操作为逻辑移位,对于带符号数移位操作为算术移位。这样的好处是编译器只要根据数的类型就可以选择移位操作方式。例如,式子“x<<a”表示对x左移a 位;式子“x>>a”表示对x 右移a 位。每左移一位,相当于数值扩大一倍,即相当于数值乘以2k;每右移一位相当于数值缩小一半,即相当于数值除以2k。