数字a右移8位再乘以256表示为:(a >>8)*256---右移8位可以理解为除以2的8次方,而2的8次方值为256,所以(a>>8)*256 = 1
//参数说明: 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
}
取出高8位,然后右移8位,再取出低8位,然后左移8位,再把它们相加就可以了,代码:
#include<stdio.h>unsigned short MyConvert(unsigned short sval)
{
return ((sval&0x00ff)<<8) + ((sval&0xff00)>>8)
}
int main()
{
unsigned short sval = 0xabcd
printf("%d,0x%X\n", sval, sval)
sval = MyConvert(sval)
printf("%d,0x%X\n", sval, sval)
return 0
}
测试截图: