写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。c语言实现

  • Post author:
  • Post category:其他


今天遇到了一道题,挺有意思的!思路呢,是借鉴前辈大佬的。纯纯想记录并且分享给大家!

先讲讲我的思路把。

通过整数右移的方法求得每位二进制数,再用一个数组保存起来。通过对数组二进制下标的控制,交换二进制奇数位和偶数位。

接下来,开始奇妙的脑回路旅行吧。

1.整数二进制序列与10101010101010101010101010101010(即0xaaaaaaaa)进行按位与的操作,保留奇数位。要想完成奇数位与偶数位的交换,那么就要将奇数位向左移动一位来实现。如果向右移动一位,会导致奇数位的一位缺失。

2.整数二进制序列与01010101010101010101010101010101(即0x55555555)进行按位与的操作,保留偶数位。要想完成奇数位与偶数位的交换,那么就要将偶数位向右移动一位来实现。如果向左移动一位,会导致偶数位的一位缺失。

3.直接将以上的结果相加,即完成偶数位与奇数位的交换。



版权声明:本文为shizhongruyi0606原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。