我想知道一些应用循环移位的例子。例如,对无符号整数右移将导致除以2。相反,左移将导致乘以2。二进制数的循环移位有什么著名的/有趣的性质吗。
注意:关于右/左移位的示例是为了说明该特定运算符的应用我要求提供循环移位运算符/函数的类似示例。

最佳答案

在大端和小端表示之间转换16位字:右或左循环移位8。
生成偶数位集的随机位集:t = rand(); result = t XOR cshift(t,1)
就位、稳定和线性时间:将某个偶数位置数组的所有元素移到开头,将奇数位置数组的所有元素移到结尾。本文描述了一种可能的算法:"In-Situ, Stable Merging by way of the Perfect Shuffle"(第7节)。它生成所有可能的二元项链,并将它们用作循环领头算法的起点,在循环领头算法中,每个下一个位置由上一个位置通过循环移位计算得出。这个应用程序与henrik的答案中提到的乘法运算密切相关。
微观优化。假设您需要从一个字节中解压四个2位字。您可以通过将每个子单词移到最右边的位置,然后使用适当的掩码应用和操作来完成此操作。(不需要移动第一个子词或屏蔽最后一个子词)。所有这些都需要6个CPU指令。如果将字节循环移位4,则两个中间的子字将成为第一个和最后一个,并且每个子字只需要一条指令。因此,使用循环移位将所需的指令数减少到5。
当机器指令集包含旋转指令时,加密应用程序将获得显著的加速。例如,Twofish密码广泛使用循环移位。

07-28 01:35
查看更多