目录✒题目分析 && 实现思路[位运算]1、获取这个整数的奇数位和偶数位2、使用移位运算使【奇变偶】【偶变奇】3、合并奇数位和偶数位⌨代码分析1、代码展示2、算法图解
首先来说一下本题的实现思路?
0101
,1均在奇数位上。a写成二进制的形式为1010
,1均在偶数位上0x555555550
、0xaaaaaaaa
;所以将这个整数与前者进行【&】运算便可以保留下它的奇数位;这个整数与后者进行【&】运算便可以保留下它的偶数位<<
>>
看完整体的思路之后,相信你对本题一定有了大致的方向,我们将上述的思路转化为代码 如果对宏定义不太清楚的可以看看这篇文章——> C生万物 | 详解程序环境和预处理
#define SWAP(n) num = (((n & 0xaaaaaaaa) >> 1) | ((n & 0x55555555) << 1))
int main(void)
{
int num = 36;
int ret = SWAP(num);
printf("num = %d\n", num);
return 0;
}
来看看运行结果吧?
再通过画图来分析一下,就看得更清楚了
首先就是第一步,分别取出奇数位和偶数位
奇变偶
、偶变奇
?可以看到最后的结果就是我们程序的执行结果【24】
总结一下本文所学习到的内容
本篇文章虽然讲解的内容并不多,但是攻克了一道难题,虽然宏的代码看起来比较简洁,但是要想到还是需要一些时间的。如果我们在写程序的时候能够巧妙地运用宏去进行解决,就能事半而功倍
以上就是C生万物使用宏将整数二进制位的奇偶数位交换的详细内容,更多关于C 宏整数二进制奇偶数位交换的资料请关注编程网其它相关文章!
--结束END--
本文标题: C生万物C语言宏将整数二进制位的奇偶数位交换
本文链接: https://lsjlt.com/news/195330.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0