前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >交换一个整数的二进制奇数位与偶数位

交换一个整数的二进制奇数位与偶数位

作者头像
怠惰的未禾
发布2023-04-27 21:26:01
发布2023-04-27 21:26:01
27300
代码可运行
举报
文章被收录于专栏:Linux之越战越勇Linux之越战越勇
运行总次数:0
代码可运行

思路

前提:

int类型整数为例,假设一个int变量占四字节空间。 假设二进制数的最低位是奇数位。

假设一个整数的二进制形式为00000000 00000000 0000000 10100101,十进制形式是165。 那么交换之后的二进制形式为00000000 0000000 00000000 01011010,十进制形式是90

思路:

  1. 二进制数00000000 00000000 00000000 10100101的所有奇数位保持不变而偶数位变为0按位与上01010101 01010101 01010101 01010101,十六进制形式为0x55555555),得到二进制数00000000 0000000 00000000 00000101,再左移1个bit位,得到二进制数00000000 00000000 00000000 00001010
  2. 二进制数00000000 00000000 00000000 10100101的所有偶数位保持不变而奇数位变为0按位与上10101010 10101010 10101010 10101010,十六进制形式为0xaaaaaaaa),得到二进制数00000000 0000000 00000000 10100000,再右移1个bit位,得到二进制数00000000 00000000 00000000 01010000
  3. 最后两个二进制数00000000 00000000 00000000 0000101000000000 00000000 00000000 01010000相加得到结果00000000 00000000 00000000 01011010,即十进制的90

备注:

想要二进制数某一个bit位保持不变而其他位变为0,只需要按位与上一个新的二进制数,而这个新的二进制数除了要保持不变的bit位是1其他bit位都是0即可。11111111 11111111 11111111 11111111想要最低位保持不变,只需要按位与上00000000 00000000 00000000 00000001即可得到00000000 00000000 0000000 00000001


代码实现

代码语言:javascript
代码运行次数:0
复制
#include <stdio.h>

int main() {
	int n = 0;
	scanf("%d", &n);
	int z = ((n & 0x55555555) << 1) + ((n & 0xaaaaaaaa) >> 1);
	printf("%d\n", z);

	return 0;
}

运行结果:


END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
    • 前提:
    • 思路:
    • 备注:
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档