標題: 完成8位數據高低位交換只需三步的代碼 [打印本頁]
作者: LQMEI 時間: 2013-4-21 17:09
標題: 完成8位數據高低位交換只需三步的代碼
蝶式交換法代碼:
unsigned char shift_fun2(unsigned char data)
{
data=(data<<4)|(data>>4);
data=((data<<2)&0xcc)|((data>>2)&0x33);
data=((data<<1)&0xaa)|((data>>1)&0x55);
return data;
}
在遇到交換字節位的問題時使用蝶式交換法和查表法來實現。查表法顧名思義即將一些值存到內存中
需要計算時查表即可但是也會占用額外的存儲空間。這里主要介紹一下蝶式交換法
設原始位為 1234 5678
data=(data<<4)|(data>>4); 之后位序為 5678 1234
data=((data<<2)&0xcc)|((data>>2)&0x33); 之后位序為 7856 3412
data=((data<<1)&0xaa)|((data>>1)&0x55); 之后位序為 8765 4321
由此完成了整個位的逆序轉換
[此貼子已經被作者于2013-4-21 17:09:46編輯過]
作者: ahshmj 時間: 2013-4-22 13:12
........
[此貼子已經被作者于2013-4-22 13:14:11編輯過]
作者: lizhendong 時間: 2017-11-15 21:14
太好了,正要找的,謝謝了
作者: sinxcosx 時間: 2018-1-13 11:17
代碼少,難看明白的代碼還是少用好
作者: hk0506 時間: 2018-8-6 15:07
來來 給你解釋一下
設原始位為 1234 5678
data=(data<<4)|(data>>4); //data<<4,數據左移4位,5678 000;data>>4,數據右移4位,0000 1234;|按位或 , 之后位序為 5678 1234
data=((data<<2)&0xcc)|((data>>2)&0x33); 5678 1234 data<<2左移2位,7812 3400;&按位與1100 1100,得7800 3400;data>>2,右移兩位,0056 7812,位與0011 0011,得0056 0012;位或之后位序為 7856 3412
data=((data<<1)&0xaa)|((data>>1)&0x55); 7856 3412左移一位8563 4120,位與1010 1010得8060 4020;右移一位 0785 6341,位與0101 0101得0705 0301,;位或之后位序為 8765 4321
作者: JK_L 時間: 2021-8-4 14:25
這里,有data的作用域問題,
作者: iClass263 時間: 2021-12-5 20:27
阿這...學到了,牛
作者: li64331218 時間: 2023-3-20 12:56
傅里葉算法可以用到
作者: xuxiaojian 時間: 2023-3-23 20:36
太牛了吧
作者: 指北針 時間: 2024-5-28 18:01
這是咋想出來的?
作者: liuzx66 時間: 2024-5-29 13:17



作者: nearsea 時間: 2024-6-10 16:53
有沒有算過能傳統兩字節左移右移快多少?
作者: 電子輝 時間: 2024-9-11 16:55
為什么不用結構+聯合,想換都行,何必搞這么復雜
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |