python 实现汇编指令循环左移和循环右移

8 篇文章 0 订阅

 

ROL(Rotation Left)   ROR(Rotation Right)

def ROR(i,index):
    tmp = bin(i)[2:].rjust(8,"0")
    """
    >>>bin(10)
    '0b1010' 
    所以从[2:]开始
    
    rjust(width[,fillchar=None])
    width -- 指定字符串长度,要在Unicode字符串长度范围内。
    fillchar -- 可选参数,指定的填充字符,默认为空格
    .rjust(8,"0")长度填充至8位,填充字符为0 
    """
    for _ in range(index):   # 模拟循环右移
        tmp = tmp[-1] + tmp[:-1]   #取最后一位 取从第1位到最后一位前一位,拼接起来。相当于右移了一位。
    return int(tmp, 2)
    """
    1.模拟循环右移(ROR)  左移则是ROL
    取最后一位 取从第1位到最后一位前一位,拼接起来。相当于右移了一位。
    2.右移几位,就是把1改成相应的值。在函数中index作为循环次数,决定了右移的位数
    3.同理,循环左移(ROL)
    取从第2位到最后一位  取第一位,拼接起来。 相当于左移了一位
    class int(x, base=10)
    x -- 字符串或数字。使用后边的参数时,x要以字符串形式“”
    base -- 进制数,默认十进制。说明前边的内容是什么进制数。最终返回的都是十进制
    >>>int("12",16)
    18
    16进制形式的12的int为18(十进制)
    
    """
def ROL(i,index):
    tmp = bin(i)[2:].rjust(8, "0")
    for _ in range(index):
        tmp = tmp[1:] + tmp[0]
    return int(tmp, 2)

同理,写逻辑左移和右移的话(好像叫这名字)就是不取一部分。用0拼接。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值