左旋转的数学等价物是什么?

时间:2011-08-03 10:14:01

标签: algorithm assembly rotation

我正在尝试破解一些涉及8位二进制数上多次左旋转的汇编代码。

供参考,代码为:

lab:    rol    dl,1
        rol    dl,1
        dec    ecx
        jnz    lab

decjnz不是问题,但可以显示2 rol被执行多次。

我想要做的是找出这段代码的数学等价物,例如公式。我当然不是在寻找一个完整的公式来告诉我整个代码,但我想知道是否有一个公式给出了单个左旋转的等价(以小数表示)。

我尝试用几个不同的数字来解决这个问题,但是看不到两个结果之间的联系。例如:如果起始编号为115,则表示为220,但如果起始编号为99,则表示为216。

2 个答案:

答案 0 :(得分:8)

鉴于您的样本结果,我假设我们将8位数量视为无符号。

7个低位向左移位,将该部分乘以2;并且高位被交换到开头。

因此,(x % 128) * 2 + (x / 128),使用通常的整数div / mod运算符。

答案 1 :(得分:-3)

将包含数字X的字节向左移位一位(位置)等于将数字X乘以2:

x<< 1< ==> x = x * 2