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