二进制位移指令是一种用于对二进制数进行位级操作的指令,通过改变二进制位的位置实现数值的扩展或压缩。以下是关键要点:
基本定义 二进制位移指令通过将二进制数向左或向右移动指定位数,实现数值的逻辑或算术运算。左移相当于乘以2的n次方,右移相当于除以2的n次方。
主要类型
- 左移(`<<`):所有位向左移动n位,空位补0。例如:`1010 << 2` → `101000`。 - 右移(`>>`):所有位向右移动n位,空位补符号位(正数补0,负数补1)。例如:`1010 >> 2` → `10`。 - 算术移位:
- 左移(`SAL`):符号位保持不变,空位补1。例如:`-1010 << 2` → `110100`(二进制补码表示)。 - 右移(`SAR`):符号位保持不变,空位补1。例如:`-1010 >> 2` → `1101`(二进制补码表示)。 - 无符号移位:
- 右移(`>>>`):空位补0,不保留符号位。例如:`1010 >>> 2` → `000010`。
应用场景
常用于数据压缩、位掩码操作、快速乘除法(如乘以2的幂次或除以2的幂次)等场景,可提高程序执行效率。
注意事项
不同编程语言对移位指令的支持和行为可能略有差异,例如Java中的无符号右移运算符(`>>>`)在C语言中对应逻辑右移(`>>`)。