#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 循环左移
unsigned int left(unsigned int value, int n) {
return (value << n) | (value >> (32 - n));
}
// 循环右移
unsigned int right(unsigned int value, int n) {
return (value >> n) | (value << (32 - n));
}
int main()
{
unsigned int usi = 0x12345678; // 待循环移位的32位无符号数
int d = 4; // 移位距离
printf("原数: 0x%x\n", usi);
printf("循环左移 %d 位: 0x%x\n", d, left(usi, d));
printf("循环右移 %d 位: 0x%x\n", d, right(usi, d));
return 0;
}
输出结果:
(32位无符号数, 4位 2 进制数正好对应 1位 16进制数, 所以看上去是移动了”1位”)
原数: 0x12345678
循环左移 4 位: 0x23456781
循环右移 4 位: 0x81234567