算术移位

算术移位简介

算术移位(Arithmetic Shift)是一种在二进制数上执行的位移操作,主要用于有符号数的乘除运算。与逻辑移位不同,算术移位能够保留数值的符号位,从而确保移位后的数仍保持原有的正负特性。

算术左移(Arithmetic Left Shift)

算术左移通过将所有位向左移动指定的位数,右侧空出的位补零。对于有符号数,左移操作相当于乘以 2n,其中 n 是移位的位数。

公式表示

左移n数值×2n

示例
将有符号数 5(二进制表示为 00000101)左移 2 位:

00000101 << 2 = 00010100

数值变为 20,即 5×22=20

算术右移(Arithmetic Right Shift)

算术右移通过将所有位向右移动指定的位数,左侧空出的位用原符号位填充(即保留符号位)。这种操作相当于对有符号数进行除以 2n 并向下取整。

公式表示

右移n数值2n

示例
将有符号数 20(以8位补码表示为 11101100)右移 2 位:

11101100 >> 2 = 11111011

移位后的二进制 11111011 表示 5,即 2022=5

算术移位与逻辑移位的区别

公式示例

假设有一个8位有符号数 x,其算术右移 1 位的操作可以表示为:

x右移1={x2若 x0x2若 x<0

其中, 表示向下取整。

优缺点

优点

缺点

总结

算术移位是一种高效处理有符号数乘除以2的幂次的位移操作,���过保留符号位确保数值的正负特性。理解算术移位的原理和应用,对于底层编程和计算机体系结构的学习具有重要意义。