免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jiony
打印 上一主题 下一主题

基础不牢问define?【关系位运算】 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-10-06 15:18 |只看该作者

回复 #10 jiony 的帖子

就是一个移位拼接,仔细看一下吧

论坛徽章:
0
12 [报告]
发表于 2007-10-06 17:27 |只看该作者
  1. 先说一个简单的例子,(p[o]  << 8) | p[(o)+1]

  2. 这个p[o]  << 8 是把 p[o]左移8位,一般结果是16位,高8位( 如果左边为高 )为p[o] ,低8位为0.
  3. p[(o)+1]是数组p里o的下一个,这两个结果 |之后,就把p[(o)+1] 放到了低8位,这样就把一个数组
  4. p 中连续两个(即o , o+1)数合成了一个16位的整数。

  5. 由此可见 p 应该定义为8位的 unsinged char ,否则不能得到正确的结果。

  6. 在看
  7. #define GET_12(p, o)    (((p[o] & 0x0f) << 8) | p[(o)+1])
  8. (p[o] & 0x0f) 表示取p[0]的低4位,高4位为0,也就是说最终的结果是取了p[o]的低4位和p[(o)+1]的8位,共12位。
复制代码

[ 本帖最后由 beyond2004 于 2007-10-6 17:29 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2007-10-06 17:42 |只看该作者
没看明白b是用来做什么的:
#define    GET_2(p, o, b)    ((p[o] >> ((b)-1)) & 0x03)

论坛徽章:
0
14 [报告]
发表于 2007-10-06 20:12 |只看该作者
原帖由 beyond2004 于 2007-10-6 17:27 发表
先说一个简单的例子,(p[o]   


感谢你的具体例子分析,真诚的感谢!

论坛徽章:
0
15 [报告]
发表于 2007-10-06 20:13 |只看该作者
再次谢谢大家,我已经基本弄懂了,特别感谢CUDev,beyond2004 !向你们学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP