问题描述
- 问题是在面试中遇到的,原题描述如下:
对一个字节数据,逐个交换其高低位。
ps: 面试时候的解法就是下面的解法一,面试官说可以一行代码就可以搞定,现在还不知道怎么做?
一、容易想到的方法
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;
}
return tmp;
}
二、蝶式交换法
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);
return data;
}