C语言(buf[7]&0xFF)*256和数字右移8位再乘以256分别什么意思,望解答的详细些

Python012

C语言(buf[7]&0xFF)*256和数字右移8位再乘以256分别什么意思,望解答的详细些,第1张

(buf[7]&0xFF)*256---这个表示buf[7]这个值的低8位非0部分全部替换为1,然后再乘以256

数字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

}

测试截图: