C++二进制翻转实例分析
本文实例讲述了C++二进制翻转的方法,将常用的几种解决方法罗列出来供大家比较选择。具体如下:
首先来看看一个相对笨拙的算法:
#include<iostream>
usingnamespacestd;
voidprintBinary(unsignedcharstr,intsize=1)
{
intflag=0x01;
for(inti=0;i<size;i++)
{
for(inti=0;i<8;i++)
{
if(str&(0x01<<(7-i)))
cout<<"1";
else
cout<<"0";
}
cout<<endl;;
}
}
unsignedcharmySwap(unsignedchardata)
{
unsignedcharflag=0x01;
for(inti=0,j=7;i<j;i++,j--)
{
intright=data&(0x01<<i);
intleft=data&(0x01<<j);
data&=~(0x01<<j);
data&=~(0x01<<i);
intdist=j-i;
data|=(right<<dist);
data|=(left>>dist);
}
returndata;
}
voidmain(void)
{
charsource=0x07;
inti;
printBinary(source,1);
unsignedcharresult=mySwap(source);
printBinary(result);
}
下面这个翻转程序相对上面实例而言简洁高效:
unsignedcharswapBinary(unsignedchardata)
{
intsign=1;
unsignedcharresult=0;
for(inti=0;i<=7;i++)
{
result+=((data&(sign<<i))>>i)<<(7-i);
}
returnresult;
}
下面这个反转程序比较容易理解:
unsignedcharswapBinary2(unsignedchardata)
{
data=((data&0xf0)>>4)|((data&0x0f)<<4);
data=((data&0xCC)>>2)|((data&0x33)<<2);
data=((data&0xAA)>>1)|((data&0x55)<<1);
returndata;
}
最后这个超牛的反转程序简直碉堡了。。。
unsignedcharcodeTable[16]={0x00,0x08,0x04,0x0c,0x02,0x0a,0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f};
unsignedcharswapBinary3(unsignedchardata)
{
return((codeTable[data>>4])|(codeTable[data&0x0f]<<4));
}
希望本文所述对大家C++程序算法设计的学习有所帮助。