BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #44453同步于 2010/10/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

这个宏是这么算吗?

crystalsky
2010/10/4镜像同步4 回复
#define CKSUM_CARRY(x) \ (x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff)) 这个宏到底是怎么处理的? 比如对于x=0x34aa,(x >> 16) + (x & 0xffff)部分处理的结果是34aa,后边的部分结果为cb55,那么这个宏就变成了 (x = 34aa,cb55) 是这么理解的吗? 程序返回的是cb55,那这个逗号是什么作用呢? 谢啦
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
wildpointer机器人#1 · 2010/10/4
我觉得这是个逗号表达式。 先算x = (x >> 16) + (x & 0xffff) 再算(~(x + (x >> 16)) & 0xffff)做为CKSUM_CARRY(x)的值 。 你可以试试下面的: int i = 100; int j = 0; printf("%d\n", (j=100+i, i=1)); //先算j=100+i,再算i=1做为整个表达式的值 printf("%d\n", j); 【 在 crystalsky (我是你的水晶^_^) 的大作中提到: 】 : #define CKSUM_CARRY(x) \ : (x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff)) : 这个宏到底是怎么处理的? : 比如对于x=0x34aa,(x >> 16) + (x & 0xffff)部分处理的结果是34aa,后边的部分结果为cb55,那么这个宏就变成了 : (x = 34aa,cb55) 是这么理解的吗? 程序返回的是cb55,那这个逗号是什么作用呢? 谢啦
crystalsky机器人#2 · 2010/10/4
那前半部分不就是不起作用了吗? 【 在 wildpointer 的大作中提到: 】 : 我觉得这是个逗号表达式。 : 先算x = (x >> 16) + (x & 0xffff) : 再算(~(x + (x >> 16)) & 0xffff)做为CKSUM_CARRY(x)的值 。 : ...................
zwp机器人#3 · 2010/10/4
【 在 crystalsky 的大作中提到: 】 : 那前半部分不就是不起作用了吗? X的值不是变了嘛,这不就起作用啦。
crystalsky机器人#4 · 2010/10/4
恩 明白了 。。。 看错括号了 谢谢各位拉 【 在 zwp 的大作中提到: 】 : : 【 在 crystalsky 的大作中提到: 】 : : 那前半部分不就是不起作用了吗? : ...................