| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:大家帮我解析一个宏呗 我对宏比较不熟悉
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:9 
大家帮我解析一个宏呗 我对宏比较不熟悉
程序代码:
#ifndef MAKE_VER
    typedef unsigned short    _VER_T;
    #define MAKE_VER(a, b)
    (
    (_VER_T)(((unsigned char)(((_VER_T)(a)) & 0xff)) | ((_VER_T)((unsigned char)(((_VER_T)(b)) & 0xff))) << 8)
    )
#endif

我测试结果是:
a+b*256


搜索更多相关主题的帖子: color 
2014-03-07 17:22
w851777025
Rank: 7Rank: 7Rank: 7
来 自:新疆
等 级:黑侠
威 望:2
帖 子:135
专家分:584
注 册:2014-1-19
收藏
得分:10 
哇,又是这么靠前
2014-03-07 18:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
写成这样如何? (a & 0xff)|((b & 0xff) << 8)

重剑无锋,大巧不工
2014-03-07 21:07
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:10 
只能曾个分
2014-03-07 21:40
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用beyondyf在2014-3-7 21:07:30的发言:

写成这样如何? (a & 0xff)|((b & 0xff) << 8)

问题一、后面的bx2^8 我貌似知道一点 但是前面的|为啥是加法关系
就有些糊涂了

问题二、弄那么多强制转换干吗  看的头疼
       感觉都是无符号短整型呢

DO IT YOURSELF !
2014-03-08 00:06
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:80 
或运算本就又叫逻辑加法。在二进制不发生进位时它等价于算术加法。同样与运算也叫逻辑乘。

至于作者为什么进行这么多次强制转换我也不知道。可能是为了精确控制每一次运算吧。除了那个(unsigned char)的转换觉得略显多余,其它的还好。

万哥改过人家的代码对吧?原本这个宏是在一行上的吧宏不能这么改,想换行必须在末尾加个反斜杠(反斜杠后只能回车,不能有其它任何字符包括空格)。

重剑无锋,大巧不工
2014-03-08 08:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 beyondyf
宏有啥好处呢  感觉还不如函数来的清晰明了

DO IT YOURSELF !
2014-03-08 08:31
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
(a & 0xff)|((b & 0xff) << 8) 含义应该是取a二进制下的后8位,再取b二进制下的后8位并将其8位左移,然后合并成1个数值。不是简单的加法。
2014-03-08 10:58
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
我想强制类型转换是为了防止实参是实型的导致计算无法实现。
2014-03-08 11:07
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
收藏
得分:0 
我觉得unsigned char可以理解,但short可以只做一次嘛
2014-03-09 08:59
快速回复:大家帮我解析一个宏呗 我对宏比较不熟悉
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025582 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved