2024-05-12 62
宏是程序设计语言一个重要的内容,对于一些步骤少却又使用频繁的操作,考虑到程序容量和执行效率的问题我们一般不将其封装为函数而是以宏的形式出现。对于单片机程序这一点尤为突出。宏语言分类非常广泛,这里介绍C语言常用的一些宏的编写方法。
1.利用二进制宏可以解决C语言不能直接使用二进制量的问题,宏核心代码如下: #define LONG_TO_BIN(n) \ (\ ((n >> 21) & 0x80) | \ ((n >> 18) & 0x40) | \ ((n >> 15) & 0x20) | \ ((n >> 12) & 0x10) | \ ((n >> 9) & 0x08) | \ ((n >> 6) & 0x04) | \ ((n >> 3) & 0x02) | \ ((n ) & 0x01)\ ) #define BIN(n) LONG_TO_BIN(0x##n##L) 我们可以直接使用BIN(11100111)这种形式来使用常量,这就是最直观的二进制形式,非常方便,下载我们新建工程,测试代码如图:
2.由数制转换基本知识可知 二进制11000111对应十进制的199,我们使用BIN(11000111)与使用199具有同样的效果,程序运行结果验证了这一点。
1.对于位操作,C语言提供了位域,但是位域要结合结构体使用,而由于C语言对字节对齐的方式未给出严格定义,不同编译器对于结构体的内存布局会有不同的实现方式,这就导致位域存在兼容性问题。我们可以使用位清除和未设置宏来解决这一问题: #define SET_BIT(var,BIT_POS) {var |= (0x01 (NUM2) ? (NUM1 - NUM2):(NUM2 - NUM1)) 这样便可以写作: c = ABS(a, b); 而且你还可以倒过来这样写: c = ABS(b, a); 仅仅才一行,程序看起来是不是感觉清爽多了? 图中给出一个测试代码,帮助进一步理解这个宏程序:
2.图中为ABS测试程序的运行结果,可以看出当a = 0, b = 10时a和b之间差10各数,与程序运行结果一致。而当a = 10, b = 10时,它们之间差0各数,程序执行ABS(a,b)后结果为0,也是一致的。最后当a = 11, b = 10,即a和b之间差1个数,程序执行ABS(a, b)后结果也是1.
原文链接:http://www.tpbz008.cn/post/53737.html
=========================================
http://www.tpbz008.cn/ 为 “电脑技术吧” 唯一官方服务平台,请勿相信其他任何渠道。
系统使用 2023-04-23
应用技巧 2023-07-01
电脑技术 2023-10-29
应用技巧 2023-11-14
应用技巧 2022-11-20
系统使用 2022-11-15
应用技巧 2023-03-09
系统使用 2022-11-21
应用技巧 2023-03-14
应用技巧 2023-02-14
扫码二维码
获取最新动态