0
点赞
收藏
分享

微信扫一扫

C_2022_02_23 程序的编译(预处理操作)+链接(进阶)

拾光的Shelly 2022-03-12 阅读 43

一、

作业标题

交换奇偶位

作业内容

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

#define Change_Odd_and_Even(n) (((n&(0xaaaaaaaa))>>1)|((n&(0x55555555))<<1))
int main()
{
	int a = 0;
	printf("二进制奇偶位交换前,请输入一个数:\n");
	scanf("%d", &a);
	printf("二进制奇偶位交换后:\n");
	printf("%d\n", Change_Odd_and_Even(a));
	return 0;
}

二 、

作业标题

offsetof宏

作业内容

写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明

#define My_offsetof(StructType, MemberName) (size_t)&(((StructType *)0)->MemberName)

//当把数字0转换成指针0时,那么指针0的地址默认是0
//所以(StructType*)0,表示的意思是,0此时是一个结构体指针,该指针的地址是0
//那么&(StructType *)0)->MemberName就是取出结构体中某元素地址
//(size_t)&(((StructType *)0)->MemberName),(size_t)表示将取得的地址转换成对应的字节大小
struct A
{
	int a;
	char b;
	double c;
};

int main()
{
	printf("%d\n", My_offsetof(struct A, a));
	printf("%d\n", My_offsetof(struct A, b));
	printf("%d\n", My_offsetof(struct A, c));
	return 0;
}

 

举报

相关推荐

0 条评论