【计算机组成原理-22】逻辑移位(Logical Shift)和循环移位(Circular Shift)

逻辑移位(Logical Shift)和循环移位(Circular Shift)

逻辑移位循环移位是计算机中用于整数(二进制数)位操作的重要技巧。它们的功能和用途与算术移位不同,通常用于无符号整数的处理。以下是对这两种移位操作的详细介绍。


1. 逻辑移位(Logical Shift)

逻辑移位是最基本的位移操作,它将二进制数中的所有位向左或向右移动,同时在空出的位置填充 0。逻辑移位并不关心符号位,因此它通常用于无符号整数的操作。与算术移位不同,逻辑移位不会根据符号位调整移位操作。

1.1 逻辑左移(Logical Left Shift)

逻辑左移是将二进制数的所有位向左移动若干个位置,并在右边用 0 填充。左移操作通常相当于无符号整数的乘法(乘以 2)。

  • 左移规则:每个二进制位向左移动 n 位,左侧溢出的位丢弃,右侧用 0 填充。
示例:

假设有一个 8 位的整数 10101010(即 170),我们对它进行逻辑左移 1 位:

原数:10101010 (二进制) = 170 (十进制)
逻辑左移1位:01010100 (二进制) = 84 (十进制)
1.2 逻辑右移(Logical Right Shift)

逻辑右移是将二进制数的所有位向右移动若干个位置,并在左边用 0 填充。右移操作通常相当于无符号整数的除法(除以 2)。

  • 右移规则:每个二进制位向右移动 n 位,右侧溢出的位丢弃,左侧用 0 填充。
示例:

假设有一个 8 位的整数 10101010(即 170),我们对它进行逻辑右移 1 位:

原数:10101010 (二进制) = 170 (十进制)
逻辑右移1位:01010101 (二进制) = 85 (十进制)
1.3 逻辑移位的特点
  • 不考虑符号位:逻辑移位不关心符号位,适用于无符号整数。
  • 快速实现:逻辑移位是一种常见的位操作,通常在硬件中直接支持,执行速度非常快。
  • 应用场景:主要用于无符号整数的乘除法操作、数据加密、位图处理、编码等。

2. 循环移位(Circular Shift)

循环移位,又叫 环形移位(Cyclic Shift),是一种特殊的位移操作,其中被移出的位会“循环”到另一个端的位置。它不同于逻辑移位,因为移出的位不会丢失,而是会重新进入到另一端。循环移位可以是向左的循环移位,也可以是向右的循环移位。

2.1 循环左移(Circular Left Shift)

循环左移是将二进制数的所有位向左移动若干个位置,左侧的溢出位会被“循环”到右侧。这样,移位后的结果会保持相同的位数。

  • 左移规则:每个二进制位向左移动 n 位,左侧溢出的位“循环”到右侧。
示例:

假设有一个 8 位的整数 10101010(即 170),我们对它进行循环左移 1 位:

原数:10101010 (二进制) = 170 (十进制)
循环左移1位:01010101 (二进制) = 85 (十进制)
2.2 循环右移(Circular Right Shift)

循环右移是将二进制数的所有位向右移动若干个位置,右侧的溢出位会被“循环”到左侧。移位后的结果依然保持相同的位数。

  • 右移规则:每个二进制位向右移动 n 位,右侧溢出的位“循环”到左侧。
示例:

假设有一个 8 位的整数 10101010(即 170),我们对它进行循环右移 1 位:

原数:10101010 (二进制) = 170 (十进制)
循环右移1位:01010101 (二进制) = 85 (十进制)
2.3 循环移位的特点
  • 循环性:循环移位的核心特点是移出的位重新进入到另一端,从而保证移位后数值的位数不变。
  • 常见应用:循环移位常用于加密算法(例如 AES 加密、哈希函数)中,以确保数据位的均匀分布。它在旋转寄存器(Shift Registers)中也有广泛应用。
  • 不丢失位信息:与逻辑移位不同,循环移位不会丢失任何位,它的应用场景更多地体现在一些需要周期性排列的算法中。

3. 逻辑移位与循环移位的对比

移位类型操作方式结果应用场景
逻辑左移向左移动,右侧填充 0乘以 2无符号整数的乘法
逻辑右移向右移动,左侧填充 0除以 2无符号整数的除法
循环左移向左移动,左侧溢出的位移到右边数据轮转数据加密、哈希算法、旋转寄存器
循环右移向右移动,右侧溢出的位移到左边数据轮转数据加密、哈希算法、旋转寄存器

4. 逻辑移位与循环移位的硬件实现

  • 逻辑移位通常通过硬件中的移位寄存器来实现,硬件直接对二进制数据进行位操作,左移和右移通常使用加法器或专门的移位电路来加速。

  • 循环移位的硬件实现较为复杂,因为它需要将数据中的溢出位“循环”回到另一端。循环移位操作通常通过 双寄存器环形缓冲区 来实现,这些结构能够在硬件中高效地进行循环操作。

5. 应用实例

  • 逻辑移位:用于处理无符号数的乘法与除法操作。例如,当你需要对一个整数进行二进制的左移或右移时,可以利用逻辑移位快速实现。
  • 循环移位:常见于加密算法,如 AESDES 中的密钥调度、哈希算法(如 SHA-256)中的数据变换等。在这些算法中,循环移位确保数据的位被均匀分布,避免偏差,从而增强安全性。

6. 总结

  • 逻辑移位:用于无符号整数,向左或向右移位时,空出的位填充 0,常用于乘法和除法。
  • 循环移位:将溢出位循环到另一端,适用于需要数据轮换或在加密算法、哈希算法中的应用。循环移位不丢失任何位信息,确保数据的周期性和均匀分布。

两者的核心区别在于是否保留溢出位以及它们的应用领域。逻辑移位常用于数值运算,而循环移位常用于周期性数据处理和加密算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值