C语言––offsetof 宏的实现,用宏交换整数的奇偶位

本文介绍了C语言中的offsetof宏,用于获取结构体或联合体中成员的偏移量。通过示例和代码实现,展示了如何使用这个工具以及背后的奇偶位操作技巧。鼓励读者点赞、收藏和参与讨论。
摘要由CSDN通过智能技术生成

d38098235b3e4958851e3654ab416407.gif

offsetof介绍

5ca72bef07fd4ed4a976adc233994df5.png

offsetof用于查找结构体和联合体中成员位置的偏移量,以字节为单位来返回

#include <stdio.h>      
#include <stddef.h>     /* offsetof */

struct foo 
{
  char a;
  char b[10];
  char c;
};

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

结果

32f2ec77aa934ce09b1029cb653b4fa1.png

实现offsetof

#define OFFSETOF(struct_name,member_name) (size_t)&(((struct_name*)0)->member_name)

用宏交换整数的奇偶位

思路

1、先把奇数位全部拿出(整数按位与0101 0101 0101 0101 0101 0101 0101 0101),再把偶数位全部拿出(整数按位与1010 1010 1010 1010 1010 1010 1010 1010 )

2、奇数位全部向左移一位,偶数位置全部向右移动一位

3、最后再按位或

按位与、按位或、按位取反、左移、右移总结表

1a0ba264f9154f34af41868844dfa694.jpeg

2e186da9ace442b7ab6bfd4e4228a7f5.jpeg

代码实现

#define SWAP(n) ((((n)&0x55555555)<<1)|(((n)&0xaaaaaaaa))>>1)

0x55555555 等于 0101 0101 0101 0101 0101 0101 0101 0101

a0e27775c9a549b498d5e63d8e9a2c13.gif

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤

欢迎各位点赞,收藏和关注哦❤

如果有疑问或有不同见解,欢迎在评论区留言哦❤

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一码归—码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值