碟式交换:C语言代码实现字节的高低位互换
问题
解决思路
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);
假设原始位序列为 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
由此完成了整个位的逆序转换,下面是具体的实现代码:
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}
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
以上电工吧小编收集整理的 碟式交换:C语言代码实现字节的高低位互换 部分内容来自网络,如有侵权请联系删除
本文地址:http://www.dg8.com.cn/jishu/27814.html
今日推荐
2020中国电动车质量排名前十名有哪些品牌?

2020随着电动车越来越受年轻上班族的喜爱,而骑电动车也成为了一种时尚,电动车作为短距离代步工具,具有环保、经济、不塞车等诸多优势,越来越多的人选择这种低碳环保的出行方式。那么电动车十大排名,都有哪些品牌全面领先行业呢? 第一名:雅迪电动车 ...[详细]
独家专栏