(C)宏定义整数的二进制位的奇数位和偶数位交换

这篇博客介绍了如何通过位操作将整数的奇数位和偶数位分开。通过与特定的16进制数字进行按位与运算,可以实现奇偶位的分离。例如,0x55555555用于获取奇数位,0xaaaaaaaa用于获取偶数位。然后通过左移和右移位操作,可以将奇数位移动到偶数位,反之亦然。示例代码展示了如何对整数7进行这样的位操作,输出结果为11。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先要单独取出奇数位和偶数位的数字

这里我们使用两个16 进制的一对数字:0x55555555和0xaaaaaaaa

 2.把我们要求得整数转换成二进制按位与0x55555555与得出奇数位的数字向左移一位就到了偶数位(这里我们假设为),同理得出偶数位的数字右移一位:

 

 由此:由0111->1011;1011转换成10进制为11

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#define CHANGE(N) (((N&0x55555555)<<1)|(N&0xaaaaaaaa)>>1))
int main() {
	int n = 7;
	printf("%d\n", CHANGE(7);
}

 运行如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值