解决思路
unsigned char shift_fun1(unsigned char data)
{
unsigned char i;
unsigned char tmp=0x00;
for(i=0;i<8;i++)
{
tmp=((data>>i)&0x01)|tmp;
if(i<7)
tmp=tmp<<1;
}
printf(" after shift fun1 data=%x ",tmp);
return tmp;
}
所谓的蝶式交换是这样的:
data=(data<<4)|(data>>4);
data=((data<<2)&0xcc)|((data>>2)&0x33);
data=((data<<1)&0xaa)|((data>>1)&0x55);
假设原始位序列为 0 1 0 1 1 0 0 1
data=((data<<1)&0xaa)|((data>>1)&0x55); 之后序列为1 0 0 1 1 0 1 0
data=((data<<1)&0xaa)|((data>>1)&0x55);之后位序为 8 7 6 5 4 3 2 1
由此完成了整个位的逆序转换,下面是具体的实现代码:
unsigned char shift_fun2(unsigned char data)
{
data=(data<<4)|(data>>4);
data=((data<<2)&0xcc)|((data>>2)&0x33);
data=((data<<1)&0xaa)|((data>>1)&0x55);
printf(" after shift fun2 data=%x ",data);
return data;
}
文章来源于:单片机与嵌入式 原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。