//参数说明: x = 输入的值 n 移位数
//循环左移
#define ROTATE_LEFT(x, n) ((x) << (n)) | ((x) >> ((8*sizeof(x)) - (n)))
//循环右移
#define ROTATE_RIGHT(x, n) ((x) >> (n)) | ((x) << ((8*sizeof(x)) - (n)))
//使用例子:
#include <stdio.h>
int main()
{
unsigned char z=0x81,r=0,m_MoveBits=1;
r=ROTATE_LEFT(z,m_MoveBits); //循环左移 1位
printf("0x%02X 循环左移后 = 0x%02X\n",z,r);
z=ROTATE_RIGHT(r,m_MoveBits); //循环右移 1 位
printf("0x%02X 循环右移后 = 0x%02X\n\n",r,z);
z=1; r=0; //初始化 z = 1
m_MoveBits=4; //移4位
r=ROTATE_LEFT(z,m_MoveBits); //循环左移 1位
printf("0x%02X 循环左移后 = 0x%02X\n",z,r);
z=ROTATE_RIGHT(r,m_MoveBits); //循环右移 1 位
printf("0x%02X 循环右移后 = 0x%02X\n",r,z);
return 0;
}
温馨提示:答案为网友推荐,仅供参考