| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1099 人关注过本帖
标题:-----帮忙看2行源码----
只看楼主 加入收藏
sdudy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-11-3
结帖率:100%
收藏
已结贴  问题点数:9 回复次数:4 
-----帮忙看2行源码----
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))


问题:
1,LOWORD(l)是什么意思?参数1又是什么意思?
2,(WORD)(l)和(DWORD)(l)又是什么意思?
3,(WORD)(l)>> 16是什么意思?
4,(((DWORD)(l) >> 16) & 0xFFFF))是什么意思?
5,((WORD)(((DWORD)(l) >> 16) & 0xFFFF))是什么意思?
6,#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))整句又是怎么意思?



搜索更多相关主题的帖子: 源码 
2010-11-08 19:53
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:9 
#define LOWORD(l) ((WORD)(l))
取低16位,
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
取高16位。先将l转换为DWORD,这是为防止传进以个小于16位的数造成的未定义行为,右移16位得到高16位值 再与0xFFFF & 操作,这个知道吧,在这里DWORD已经是无符号数了标准的右移操作会将右移后的数值的高16为补0的,这样的话与0xFFFF相与没什么用,可能是为了某些意外吧.
如果将小写的l改成大写的L,你就不会有疑问了,其他的同理。

离恨恰如春草,更行更远还生。
2010-11-11 22:55
xmnathan
Rank: 2
等 级:论坛游民
威 望:1
帖 子:73
专家分:10
注 册:2008-8-30
收藏
得分:0 
这两个宏是为了把存在DWORD(无符号的32位数 )中的两个WORD(16位的数)数据取出来
LOWORD(l)取低位16位
HIWORD(l)取高位16位

对应的存储方法是MAKELONG
MAKELONG 是一个宏,将两个16位的数联合成一个无符号的32位数   
#define   MAKELONG(a,b)   ((LONG)(((WORD)(a))|((DWORD)((WORD)(b)))<<16))

唉 好难
2010-11-12 23:35
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
这两个宏是为了把存在DWORD(无符号的32位数 )中的两个WORD(16位的数)数据取出来
LOWORD(l)取低位16位
HIWORD(l)取高位16位

先将l转换为DWORD,这是为防止传进以个小于16位的数造成的未定义行为,右移16位得到高16位值 再与0xFFFF & 操作,这个知道吧,在这里DWORD已经是无符号数了标准的右移操作会将右移后的数值的高16为补0的,
其实就是一种汇编的处理方法,,,,&它的意思是把进来的每一个数按位相乘
2010-11-13 08:43
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
怎么都是大写?
2010-11-19 07:55
快速回复:-----帮忙看2行源码----
数据加载中...
 
   



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

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