碟式交換:C語言代碼實現(xiàn)字節(jié)的高低位互換
問題
解決思路
1unsigned char shift_fun1(unsigned char data) 2{ 3 unsigned char i; 4 unsigned char tmp=0x00; 5 6 for(i=0;i<8;i++) 7 { 8 tmp=((data>>i)&0x01)|tmp; 9 if(i<7) 10 tmp=tmp<<1; 11 } 12 13 printf(" after shift fun1 data=%x \n",tmp); 14 15 return tmp; 16 17}
所謂的蝶式交換是這樣的:
1data=(data<<4)|(data>>4); 2data=((data<<2)&0xcc)|((data>>2)&0x33); 3data=((data<<1)&0xaa)|((data>>1)&0x55);
假設(shè)原始位序列為 0 1 0 1 1 0 0 1
data=((data<<1)&0xaa)|((data>>1)&0x55); 之后序列為 1 0 0 1 1 0 1 0 更抽象的來說 原始位為1 2 3 4 5 6 7 8 data=(data<<4)|(data>>4); 之后位序為5 6 7 8 1 2 3 4
data=((data<<2)&0xcc)|((data>>2)&0x33); 之后位序為 7 8 5 6 3 4 1 2
data=((data<<1)&0xaa)|((data>>1)&0x55);之后位序為 8 7 6 5 4 3 2 1
由此完成了整個位的逆序轉(zhuǎn)換,下面是具體的實現(xiàn)代碼:
1unsigned char shift_fun2(unsigned char data) 2{ 3 data=(data<<4)|(data>>4); 4 data=((data<<2)&0xcc)|((data>>2)&0x33); 5 data=((data<<1)&0xaa)|((data>>1)&0x55); 6 printf(" after shift fun2 data=%x \n",data); 7 8 return data; 9}
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!