C语言中的自定义宏

自定义宏,令其实现所需功能
1.写一个宏,可以将一个整数字的奇数位和偶数位交换。
2.写一个宏,计算结构体中某变量相对于首地址的偏移。

具体思路1:

  1. 首先取出当前数的奇数部分和偶数部分。
  2. 即将一个数的奇数部分变成0,偶数部分不变。
  3. 然后将这个数的偶数部分变成0,奇数部分不变。
  4. 然后将只剩下奇数部分的数向后移位1。
  5. 将只剩下偶数部分的数向前移位1。
  6. 紧接着两个数相或,所得即为所求。

相关代码1

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>//写一个宏,可以将一个整数字的奇数位和偶数位交换。
#if 1
#define change_even_odd(num) ((num&0xaaaaaaaa)>>1)|((num&0x55555555)<<1)int main()
{int num = 0xaaaaaaaa;int ret=change_even_odd(num);printf("输出是: %x", ret);
}
#endif

运行结果1

具体思路2

  1. 首先将0号地址强制转化为一个结构体
  2. 然后求得当前的成员变量的地址
  3. 将其强制转化为size_t类型
  4. 由于该机构体的起始位置为0
  5. 因此当前成员变量的位置,即为所求偏移量

相关代码2

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#if 1
#define offset_of_first(StructType,MemberName) \
(size_t)&( ((StructType *)0)->MemberName)
typedef struct {char sex;int age;char name[10];char number[10];}S;int main()
{printf("偏移量为%d\n", offset_of_first(S, sex));printf("偏移量为%d\n",offset_of_first(S, age));printf("偏移量为%d\n", offset_of_first(S, name));printf("偏移量为%d\n", offset_of_first(S, number));return 0;
}
#endif

运行结果2

C语言中利用宏,实现一个整数的奇数位和偶数位交换,以及计算结构体中某变量相对于首地址的偏移相关推荐

  1. 【C语言】宏offsetof的模拟实现 (计算结构体中某变量相对于首地址的偏移)

    首先我们应该特别留意 : offsetof 是一个宏,并非是一个函数 ! 宏offsetof的介绍 : 参数:第一个是结构体类型名称,第二个是结构体成员名 返回类型:size_t无符号整形 引用的头文 ...

  2. golang sqlx scan 到结构体中_Golang语言并发编程之定时器

    上一章中对于golang的常用关键字说明如下: 1 for 和 range 2 select 3 defer 4 panic 和 recover 5 make 和 new 接下来我们来对golang的 ...

  3. C语言的sizeof运算符计算结构体大小

    C语言的sizeof运算符运算规则 sizeof运算符 **sizeof 是一个运算符,不是函数(方法).** 例子: 当想打印一个变量的存储区域大小时,可以直接写 int a = 5; printf ...

  4. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...

    利用宏定义一个字符串#define MYPHONE "AT+CMGS" 字符数组的方式来定义一个字符串unsigned char SMS[]="HELLO, WELCOM ...

  5. Excel中利用宏批量生成md5加密

    ** Excel中利用宏批量生成md5加密 一.下载宏文件 点击下载md5宏.xla 二.找到excle并加载宏 1.依次打开[文件]-[选项]-[自定义功能区] 选中[开发工具] 2.这样在Exce ...

  6. C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)

    接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...

  7. 写一个宏,可以将一个整数字的奇数位和偶数位交换

    写一个宏,可以将一个整数字的奇数位和偶数位交换 1.过程 2.预处理 3.宏和函数 4.交换奇偶位 1.过程 (1)组成一个程序的每个源文件通过编译过程分别转换成目标代码 (2)每个目标文件由链接器捆 ...

  8. 【C语言】用宏实现将一个整数的二进制位的奇数位和偶数位交换

    题目名称 :写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换. 解题思路 : 随便给出一个32个bit位的二进制数字,观察发现,: 我们可以将其奇数位的二进制位都保留,然后偶数位制成0,再右移一 ...

  9. android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...

    Android开发中利用ListView实现一个渐变式的下拉刷新动画 发布时间:2020-11-23 16:50:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关Androi ...

最新文章

  1. 收藏 | 2019 NLP大全:论文、博客、教程、工程进展全梳理(附链接)
  2. 乐山师范计算机科学与技术怎么样,乐山师范学院计算机科学与技术(本科)教育概况...
  3. Python基础(14)_python模块之configparser模块、suprocess
  4. react-template 包含客户端,服务端渲染完整示例
  5. JAVA NIO概述(一):I/O模型
  6. 经典的Java面试题及回答集锦
  7. python的命令解析getopt.getopt()函数分析
  8. linux-获取帮助-ls命令-date命令-man命令
  9. day04【后台】角色维护
  10. git几个救命的命令
  11. 2018最新JAVA基础面试题和高级面试题
  12. Delphi 调用打印指令ZPL--USB
  13. element-ui tamplate slot-scope 模板插槽的使用
  14. Canvas 炫彩小球
  15. 胃病患者饮食结构注意事项
  16. Lesson 63-64 Who has the most stressful job?
  17. 读懂K线,就能理解期货股票交易中人性的期望、猜疑、幻想、贪婪、恐惧...
  18. 亲身体验:八款知名虚拟主机对比测评
  19. 【笔记】磁盘管理(2):磁盘分区、增加swap
  20. 能上QQ不能打开网页的解决方法

热门文章

  1. Istio 1.12 引入 Wasm 插件配置 API 以扩展 Istio 生态
  2. MDK keil为什么设置代码自动补全功能页面空白,不是汉化问题造成的
  3. sox 处理语音工具
  4. 【scrapyd】部署
  5. 【嗜血GO笔记】GO语言:imported and not used: xxx 报错
  6. 一些在线系统的计时操作的实现(spring-boot计时器使用,时间戳比较先后)
  7. 【考研·数据结构】408真题 (2012年42题) 寻找第一个公共后缀的位置】
  8. 光头强的18岁生日(生日快乐)
  9. 碳通宝:银行推出碳减排工具撬动资金投向低碳领域
  10. 小白如何安装MySQL——使用安装器安装