在编程中,可能宏对于我们友友们有些陌生,今天阿博通过两道经典例题帮友友们重新认识它
它其实计算的就是在某个给定的类型中成员偏移量的大小
代码测试
#include
#include
struct S
{
int a;
char c;
double d;
};
int main()
{
printf("%d\n", offsetof(struct S, a));
printf("%d\n", offsetof(struct S, c));
printf("%d\n", offsetof(struct S, d));
return 0;
}
struct S
{
int a;
char c;
double d;
};
#define OFFSETOF(type,name) (size_t)&(((type*)0)->name) //把起始地址设为0,地址-0还是地址,那么这个地址就是它的偏移量
int main()
{
struct S s;
printf("%d\n", OFFSETOF(struct S, a));
printf("%d\n", OFFSETOF(struct S, c));
printf("%d\n", OFFSETOF(struct S, d));
return 0;
}
代码逻辑实现
代码实现
//写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
#define SWAP_BIT(x) (x=(((x&0x55555555)<<1)+((x&0xaaaaaaaa)>>1)))
int main()
{
int a = 5;
SWAP_BIT(a);
printf("%d\n", a);
return 0;
}
好了,友友们,今天的内容到这里就结束了,如果感觉有帮助的话,可以给阿博点个关注哦,后续继续给友友们分享干货知识