有一个专门做演讲的网站,微信功能定制开发,网站托管找,网站设计用什么软件实现文章目录 一. 二进制奇偶位交换说明意思#xff1f;二. 解题思路三. 代码验证四. 总结 一. 二进制奇偶位交换说明意思#xff1f;
就是一个int类型的整数在操作系统下是32位二进制01序列#xff0c;第一位和第二位交换#xff0c;第二位和第三位交换#xff0c;依次类推。… 文章目录 一. 二进制奇偶位交换说明意思二. 解题思路三. 代码验证四. 总结 一. 二进制奇偶位交换说明意思
就是一个int类型的整数在操作系统下是32位二进制01序列第一位和第二位交换第二位和第三位交换依次类推。交换奇偶位需要先分别拿出奇偶位。既然是宏分别拿出用循环不是很现实那就用这些位的方式来做。
二. 解题思路 奇数位拿出那就是要上010101010101……偶数位拿出就是要上101010101010……对应十六进制分别是555……和aaa……一般我们默认是32位整数4位对应一位16进制就是8个58个a。通过 0x55555555的方式拿出奇数位和 0xaaaaaaa的方式拿出偶数位。奇数位左移一位就到了偶数位上偶数位右移一位就到了奇数位上最后两个数字或起来就完成了交换。 举例10这个数字
二进制序列00000000000000000000000000001010奇位置0将10位上01010101010101010101010101010101 结果00000000000000000000000000000000偶位置0 将10位上10101010101010101010101010101010 结果00000000000000000000000000001010将步骤二结果左移一位:00000000000000000000000000000000将步骤三结果右移一位:00000000000000000000000000000101将步骤四和步骤五结果相加即使答案 00000000000000000000000000000101 最终交换后结果为5
三. 代码验证
#includestdio.h#define SWAP(n) (((n0x55555555)1)((n0xaaaaaaaa)1))int main()
{int n 0;scanf(%d, n);printf(交换后%d, SWAP(n));return 0;
}四. 总结
既然使奇偶交换第一步先将奇数位全变0那么就可以将偶数位全左移一位到奇数位第二步将偶数位全变0将奇数位全右移一位到偶数位两结果相加就实现了奇偶交换 最后小编制作不易麻烦各位兄弟们点点关注!