单片机c语言高低位交换,单片机中高低位交换如何实现?蝶式交换法了解一下...

原标题:单片机中高低位交换如何实现?蝶式交换法了解一下

问 题

解 决 思 路

对于该问题,我们最先想到的是对原字节通过移位操作来逐位处理,使用另一个变量来存储交换后的结果。这种解决方案处理起来思路清晰,编写代码应该不难。

下面是该思路对应的代码:

d9be6c48d1dbd8f222d9f8a0cac0445e.png

上述代码实现起来不难,而且效率还是比较高的。

但是还有比这更简洁的解决方法,在嵌入式开发中遇到交换字节位的问题时,通常使用蝶式交换法和查表法来实现。查表法顾名思义即将一些值存到内存中,需要计算时查表即可,但是也会占用额外的存储空间。

这里主要再介绍一下蝶式交换法。

所谓的蝶式交换是这样的:

9366a291da2840a298926cb7d4b9e2cc.png

我们可以做一下执行演算:

假设原始位序列为 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

由此完成了整个位的逆序转换,下面是具体的实现代码:

c5472dd43cc3cafb50c57f141c3dd541.png

结 语

交换字节的高低位并不是一个很常见的问题,遇到该问题时,需要经过仔细的分析,加上对C语言位操作的熟练掌握,就能够很好的解决这一类的问题。

免责声明:本文系网络转载,版权归原作者所有。如有问题,请联系我们,谢谢!返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值