网站建设做好了怎样链接域名,门户网站英文,商业合作及运营方案,单页网站 html思路分析
通过宏定义来实现二进制数的奇偶位交换#xff0c;如果一个个遍历交换的话#xff0c;那得算到猴年马月#xff0c;这是我在网上看到的一个思路#xff1a;
我们将每一位#xff08;整数在计算机里存储是4字节#xff0c;32位#xff09;二进制数的奇数位保留…思路分析
通过宏定义来实现二进制数的奇偶位交换如果一个个遍历交换的话那得算到猴年马月这是我在网上看到的一个思路
我们将每一位整数在计算机里存储是4字节32位二进制数的奇数位保留偶数位置为0并向右移一位这样就实现奇数位换到偶数位。同样的道理再将偶数位保留奇数位置为0并左移一位实现偶数位到奇数位的交换。
最后将得到的两个数加起来神奇的事情出现了完成了交换作者本人实现时震惊了一下太巧妙了。
步骤解析
1.将奇数位保留可以利用与的思想同1为1有0为0将奇数位每一位与1就保留了奇数位的值与的值奇数位为1偶数为置为001015需要32位转换为16进制就是0x55555555.再左移1位完成交换
2.偶数位就与10101016进制为0xaaaaaaaa。再右移一位完成交换
3.最后再相加起来就是我们需要的值。
#define _CRT_SECURE_NO_WARNINGS 1
#define change(n) (n((n0xaaaaaaaa)1)((n0x55555555)1))
#includestdio.hint main()
{int a 10;change(a);printf(%d, a);return 0;}