c语言无符号单字节数的八位以内的循环右移循环左移怎么写

如题所述

//参数说明: 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;
}

温馨提示:答案为网友推荐,仅供参考
相似回答