实现offsetof宏以及交换一个整数二进制奇偶位的宏

目录

  • 1. offsetof宏
  • 2. 交换奇偶位

1. offsetof宏

我们想用宏来实现offsetof函数,首先要了解这个函数的用法。
1.1 offsetof函数的介绍及用法
(1)功能:用来计算结构体中一个成员在该结构体中的相对起始位置的偏移量,单位是字节
(2)函数原型:

offsetof ( type , member )

(3)参数:

type: 结构体类型
member: 结构体成员

(4)使用方法:

#include  <stddef.h>struct S
{int a;char b;short c;
};int main()
{printf("%zd\n", offsetof(struct S, a)); //0printf("%zd\n", offsetof(struct S, b)); //4printf("%zd\n", offsetof(struct S, c)); //6return 0;
}

画图说明:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d435898fa94747169f5fb681392c8688.png

1.2 用宏实现offsetof
我们知道,内存中的每个字节都有自己的地址,我们假设上图所示的起始位置的地址为0x0012ff40,往下依次是0x0012ff41,0x0012ff42…,所以每个成员的偏移量可以认为是该变量首地址与起始地址之差

代码实现如下:

#include <stdio.h>#define OFFSETOF(type,member)  (size_t)&((type*)0)->memberstruct S
{int a;char b;short c;
};int main()
{printf("%zd\n", OFFSETOF(struct S, a));printf("%zd\n", OFFSETOF(struct S, b));printf("%zd\n", OFFSETOF(struct S, c));return 0;
}

把整数0强制类型转换成结构体指针类型,再取出该成员的地址,强制类型转换为无符号整型。

2. 交换奇偶位

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2f68b1c5d94f4efd8e22dab008a156e2.png

代码实现如下:

#include <stdio.h>#define SWAP(n)  ((((n) & 0x55555555) << 1 )|((((n) & 0xaaaaaaaa) >> 1 )))int main()
{printf("%d\n", SWAP(13)); //14return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ClamAV:Linux服务器杀毒扫描工具

Clam AntiVirus&#xff08;ClamAV&#xff09;是免费而且开放源代码的防毒软件&#xff0c;软件与病毒码的更新皆由社群免费发布。ClamAV在命令行下运行&#xff0c;它不将杀毒作为主要功能&#xff0c;默认只能查出系统内的病毒&#xff0c;但是无法清除。需要用户自行对病毒…

每周编辑精选|免费使用 Sora 平替、在线运行 Python 基础教程、MCFEND 中国假新闻检测数据集上线

继 ChatGPT 后&#xff0c;OpenAI 又发布了爆炸级产品——Sora 文生视频模型&#xff0c;当其他模型还在努力突破几秒内的连贯性问题时&#xff0c;Sora 已经将视频时长拉到了 60s。不过&#xff0c;目前 Sora 模型仅对小部分研究人员和创意人士开放访问权限。 别担心&#xf…

linux 创建py文件自启动服务

1、新建Python文件 test.py文件内容 print("test service ") 2、新建启动文件 testservice.sh #!/bin/shpython3 test.py 3、新建启动服务 /usr/lib/systemd/system/testservice.service [Unit] Descriptiontestservice Afternetwork.target[Service] ExecSt…

C语言之位段

1.位段的声明 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 2.位段的成员名后边有一个冒号和一个数字。 比如&#xff1a; struct A {int _a:2;int _b:5;int _c:10;int _d:30; }; A 就是一个位段类型…

【上海大学计算机组成原理实验报告】二、数据传送实验

一、实验目的 了解在模型机中算术、逻辑运算单元的控制方法。学习机器语言程序的运行过程。通过人工译码&#xff0c;加深对译码器基本工作原理的理解。 二、实验原理 根据实验指导书的相关内容&#xff0c;本次实验所要用的CP226实验仪在手动方式下&#xff0c;运算功能通过…

LeetCode-热题100:160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

centos7 安装 mysql

命令记录&#xff0c;未整理&#xff1b; 1. 下载mysql5.7的安装包&#xff0c;上传到linux系统某个目录中 2. 使用tar -xvf 解压 tar包 tar -xvf mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar 3. 使用 rpm -ivh 安装 mysql rpm -ivh mysql-community-common-5.7.35-1.el7.x8…

数据库学习案例2024-MySQL参数解析总结

MySQL参数log_bin_trust_function_creators介绍 简单介绍一下&#xff0c;当二进制日志启用后&#xff0c;这个变量就会启用。它控制是否可以信任存储函数创建者&#xff0c;不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0&#xff08;默认值&#xff09;&#…

python 三层架构思想写代码。

在 Python 中实现数据库操作的三层架构一般包括以下三层&#xff1a; 数据访问层&#xff08;Data Access Layer&#xff09;&#xff1a;负责与数据库进行交互&#xff0c;执行 SQL 查询和更新操作。 业务逻辑层&#xff08;Business Logic Layer&#xff09;&#xff1a;处理…

视频号小店在哪里登录?入驻的时候需要什么资质?

我是电商珠珠 视频号小店距离现在发展了不过一年多的时间&#xff0c;作为一个新平台就代表着很多机会、红利。所以有很多商家都看准了&#xff0c;准备往这个平台上发展。作为新手来说&#xff0c;还不知道视频号小店登录注册入口以及入驻的时候需要什么资质&#xff0c;接下…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

禁止软件访问外网

WINDOWS平台上,在特殊情况下我们要防止一些软件偷偷访问外网,比如ResEdit.exe一联网就当掉,只要把WINDOWS的防火墙功能打印,将下面脚本保存为rbt_runas_admin_firewall_block_exe_in_dir.cmd ::runas /user:administrator cmd echo 右击以管理员方式运行 cd /d %~dp0 for /r …

pytest教程-21-失败重跑插件-pytest-rerunfailures

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest插件的基本使用方法&#xff0c;本小节我们讲解一下pytest用例失败重跑插件pytest-rerunfailures。 测试环境不稳定偶发接口超时&#xff08;和服务无关&#xff0c;纯粹是环境问题&…

【C语言】带你完全理解指针(四)函数指针的应用sqort函数的实现

前言&#xff1a; 本文主要是函数指针的重要应用&#xff0c;介绍qsort函数以及模拟实现这样一个不限制使用数据类型的快速排序函数。 回调函数 函数指针有一个非常大的作用就是实现回调函数。非常重要 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xf…

python如何画奥运五环

绘制奥运五环主要涉及到Python中的turtle绘图库运用&#xff1a; 程序源代码为&#xff1a; import turtle turtle.width(10) turtle.color(black) turtle.circle(50) turtle.penup() turtle.goto(120,0) turtle.pendown() turtle.color(red) turtle.circle(50) turtle.penup()…

基于springboot酒店管理平台

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于酒店管理平台系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了酒店管理平台系统&#xff0c;它彻底改变了过…

深入理解 React 中的 children props 和 render props

深入理解 React 中的 children props 和 render props 在 React 中&#xff0c;children props 和 render props 是两种常见的组件复用模式&#xff0c;它们都可以帮助我们更好地组织和复用组件代码。虽然它们的实现方式有所不同&#xff0c;但都能够有效地实现组件之间的数据…

坚持刷题|分发饼干

文章目录 题目思路代码实现实现总结主要步骤时间复杂度 扩展问题 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷第一个贪心算法&#xff1a;分发饼干 题目 455.分发饼干 思路 要解决这个问题&#xff0c;可以使用…

世界上有那么多条条框框,就是告诉你不用格格都入

在我们的生活、工作和学习中&#xff0c;总是充斥着各种各样的规则和标准。这些条条框框&#xff0c;有时候像是一座座无形的墙&#xff0c;将我们限制在一个狭小的空间里。然而&#xff0c;如果我们换一个角度来看待这些规则&#xff0c;就会发现它们实际上是在告诉我们&#…

Autodesk Maya 2025 mac玛雅三维动画特效软件

Autodesk Maya 2025 for Mac是一款功能强大、操作简便的三维动画软件&#xff0c;适用于电影、电视、游戏、建筑、工业设计、虚拟现实和动画等领域。无论是专业设计师还是初学者&#xff0c;都可以通过Maya 2025实现自己的创意和想法&#xff0c;创作出高质量的三维作品。 软件…