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++程序算法设计的学习有所帮助。