python3 循环位移动

python3 中  >> 为算术右移位,高位补符号位; <<为左移位,低位补0;

 1 # 假如将一个无符号的数据val,长度为N,需要循环移动n位。可以利用下面的公式:
 2 #     循环左移:(val >> (N - n) | (val << n))
 3 #     循环右移:(val << (32 - n) | (val >> n))
 4 def ROLN_(val,n,N=8):
 5     bit=int('1'*N,2)
 6     val &= bit
 7     return ((val >> (N - n))&bit) | ((val << n)&bit)
 8 def RORN_(val,n,N=8):
 9     bit=int('1'*N,2)
10     val &= bit
11     return ((val <<(N - n))&bit) | ((val >> n)&bit)
12 
13 a=ROLN_(0x12345678,16,32)
14 b=RORN_(a,16,32)
15 print(hex(a))
16 print(hex(b))

输出:

0x56781234
0x12345678

原文地址:https://www.cnblogs.com/DirWang/p/12145861.html