#define:1.交换一个整数二进制的奇数偶数位 2.模拟实现offsetof

这篇博客介绍了如何使用位操作宏来交换一个整数的奇数位和偶数位,以及如何通过宏定义来计算结构体成员的偏移量。示例中展示了对于整数5和9的位交换,以及结构体S中各成员的偏移量计算。这些技巧在底层编程和理解内存布局时非常有用。
摘要由CSDN通过智能技术生成
//用宏交换一个整数二进制的奇数位和偶数位
//例如:5:0101--》10:1010;
//      9:1001--》 6:0110;
#define swap(N) ((N&(0x55555555))<<1)+((N&(0xaaaaaaaa))>>1)
//按位与01010101.....010101得奇数位数字,右移1个位
//按位与10101010.....101010得偶数位数字,左移1个位
//两者相加,就完成交换
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d\n", swap(n));
	return 0;
}
//宏模拟实现offsetof
#define OFFSETOF(struct_type,mem_name) (size_t)&(((struct_type*)0)->mem_name)//传入结构体类型和成员变量名
//将0地址强转为结构体指针,->指向想求偏移量的变量成员,&这个地址并强转为整型,就得到了该成员偏移量
struct S
{
	int a;
	double b;
	long long c;
	char d;
};

int main()
{
	printf("%d\n", OFFSETOF(struct S, a));//0
	printf("%d\n", OFFSETOF(struct S, b));//8
	printf("%d\n", OFFSETOF(struct S, c));//16
	printf("%d\n", OFFSETOF(struct S, d));//24
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值