碟式交換:C語言代碼實(shí)現(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); 之后位序?yàn)?/span>5 6 7 8 1 2 3 4
data=((data<<2)&0xcc)|((data>>2)&0x33); 之后位序?yàn)? 7 8 5 6 3 4 1 2
data=((data<<1)&0xaa)|((data>>1)&0x55);之后位序?yàn)? 8 7 6 5 4 3 2 1
由此完成了整個(gè)位的逆序轉(zhuǎn)換,下面是具體的實(shí)現(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)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!