我在K&R II C Programming ANSI C书中读到">>"和"<<"运算符控制位,但是作为一名新手,我不知道何时使用它们。我对手动构建数据包产生了兴趣,然后我找到了以下代码片段:
unsigned short csum(unsigned short *buf, int nwords)
{
unsigned long sum;
for(sum=0; nwords>0; nwords--)
sum += *buf++;
sum = (sum >> 16) + (sum &0xffff);
sum += (sum >> 16);
return (unsigned short)(~sum);
}
我知道这个计算出了校验和,但我不理解这里在做什么。XD
显然,这超出了我的技能范围,但我想我可以用这段代码来解决一些未解答的问题。什么时候你需要使用按位运算符来达到特定的值,为什么不直接使用加(+)或减(-)呢?此外,为什么在
sum
旁边有一个十六进制的&0xffff
,如果两者没有运算符?P.S.
~sum
是什么意思?