带符号数的移位操作

  • Post author:
  • Post category:其他


算数移位时应保持数的符号位不变,数值的大小则要发生变化。左移一位相当于该数乘以2,右移一位相当于该数除以2。

移位运算有算数移位、逻辑移位和循环移位一共3类,每种移位有左移和右移之分。

1. 算数移位

算数移位的对象是带符号数,在移位的过程中**必须保持操作数的符号不变**。左移一位时如果不产生溢出,则数值乘以2;右移一位时,

1.1 原码移位规则

不论正数还是负数,在左移或者右移时,符号位均不变,空出的位置一律以“0”补入。

负数的源码移位前后的 结果如下:

左移:移位前有
1 X_1X_2...X_{n-1}X_{n}

移位后有
1 X_2X_3...X_{n}0

右移:移位前有
1 X_1X_2...X_{n-1}X_{n}

移位后有
10X_1...X_{n-2}X_{n-1}

1.2 补码移位规则

(1)正数

符号位不变,不论左移或右移,空出的位置一律以“0”补入

(2)负数

左移:移位前有
1 X_1X_2...X_{n-1}X_{n}

移位后有
1 X_2X_3...X_{n}0

右移: 移位前有
1 X_1X_2...X_{n-1}X_{n}

移位后有
11X_1X_2...X_{n-2}X_{n-1}

2. 逻辑移位

逻辑移位的对象是无符号数,因此移位时不需要考虑符号问题。

逻辑左移时,高位移丢,低位填“0”;逻辑右移时,低位移丢,高位填“0”

3. 循环移位

循环移位按是否与进位位一起移位又可分为两种:不带进位位的小循环、带进位位的大循环



版权声明:本文为qq_59109986原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。