直接左移5位就可以了
u8 BYTE_TABLE[] = { 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F };
u8 Overturn(u8 data)
{
u8 res;
res = (BYTE_TABLE[data & 0xF]) << 4;
res |= BYTE_TABLE[data >> 4];
return res;
}
void test3() {
u16 i;
for(i=0;i<=0xff;i++){
printf("%2x:%2x\r\n",i,Overturn(i));
}
}
这个问题比较简单:0-7,1-6,2-5,3-4位互换即可,可定义一个临时变量 unsigned char tmp保存中间结果。
void main()
{
unchar i,x,y=0;
for(i=0;i<8;i++)
{
if((x>>i)&0x01==1)
y=1<<(7-i)|y;
}
while(1);
}
向右移动4位, 0000 0111--》 0111 0000