| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1646 人关注过本帖
标题:#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF)) 问题。。。 ...
只看楼主 加入收藏
liaoque
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-23
收藏
 问题点数:0 回复次数:4 
#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF)) 问题。。。
#define HIBYTE(w)   ((BYTE) (((WORD) (w) >> 8) & 0xFF))
(WORD) (w) 这样一个转换已经把w转换成16位数
然后在右移8位已经得到高8位了
为啥还要 &0xFF
最后还有BYTE强制转换呢?
不是很多余吗?
2012-11-17 18:38
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
&0xFF确实有点多余,不过强转BYTE还是必要的,毕竟这个宏的值应该是截断之后的一个字节。

My life is brilliant
2012-11-17 19:45
elic_2000
Rank: 2
等 级:论坛游民
帖 子:12
专家分:15
注 册:2012-11-4
收藏
得分:0 
这个不多余的,如果你见过:
unsigned char a = 0x1234;
printf( "%x", a );

其结果真的是1234的话,你就会明白为什么不多余了。
2012-11-17 22:49
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 3楼 elic_2000
兄弟你用的是神马编译器?我gcc编译有个警告,而且运行结果是34,也就是它的低字节。

My life is brilliant
2012-11-17 23:44
liaoque
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-23
收藏
得分:0 
回复 2楼 lz1091914999
谢谢我懂了
至于3L说的我真心不懂。。。
2012-11-26 00:57
快速回复:#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF)) 问题。。。 ...
数据加载中...
 
   



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

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