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拼接。