返回信息流#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,那这个逗号是什么作用呢? 谢啦
这是一条镜像帖。来源:北邮人论坛 / cpp / #44453同步于 2010/10/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
这个宏是这么算吗?
crystalsky
2010/10/4镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
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,那这个逗号是什么作用呢? 谢啦
那前半部分不就是不起作用了吗?
【 在 wildpointer 的大作中提到: 】
: 我觉得这是个逗号表达式。
: 先算x = (x >> 16) + (x & 0xffff)
: 再算(~(x + (x >> 16)) & 0xffff)做为CKSUM_CARRY(x)的值 。
: ...................
恩 明白了 。。。 看错括号了 谢谢各位拉
【 在 zwp 的大作中提到: 】
:
: 【 在 crystalsky 的大作中提到: 】
: : 那前半部分不就是不起作用了吗?
: ...................