日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 玩轉(zhuǎn)嵌入式
[導(dǎo)讀]對一個字節(jié)數(shù)據(jù),逐個交換其高低位,例如 11010001,經(jīng)過0-7,1-6,2-5,3-4對應(yīng)位的交換,變成 10001011 。對于該問題,我們最先想到的是對原字節(jié)通過移位操作來逐位處理,使用另一個變量來存儲交換后的結(jié)果。這種解決方案處理起來思路清晰,編寫代碼應(yīng)該不難。


問題

對一個字節(jié)數(shù)據(jù),逐個交換其高低位,例如 11010001,經(jīng)過0-7,1-6,2-5,3-4對應(yīng)位的交換,變成 10001011

解決思路

對于該問題,我們最先想到的是對原字節(jié)通過移位操作來逐位處理,使用另一個變量來存儲交換后的結(jié)果。這種解決方案處理起來思路清晰,編寫代碼應(yīng)該不難。
下面是該思路對應(yīng)的代碼:
    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}  
上述代碼實現(xiàn)起來不難,而且效率還是比較高的。但是還有比這更簡潔的解決方法,在嵌入式開發(fā)中遇到交換字節(jié)位的問題時通常使用 蝶式交換法 查表法來實現(xiàn)。查表法顧名思義即將一些值存到內(nèi)存中,需要計算時查表即可,但是也會占用額外的存儲空間。這里主要再介紹一下蝶式交換法。
所謂的蝶式交換是這樣的:
   1data=(data<<4)|(data>>4); 2data=((data<<2)&0xcc)|((data>>2)&0x33); 3data=((data<<1)&0xaa)|((data>>1)&0x55);  
我們可以做一下執(zhí)行演算:
假設(shè)原始位序列為
0 1 0 1 1 0 0 1
data=(data<<4)|(data>>4);之后序列為 1 0 0 1 0 1 0 1
data=((data<<2)&0xcc)|((data>>2)&0x33); 之后序列為 0 1 1 0 0 1 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)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉