网际校验算法的代码的理解,该怎么处理

网际校验算法的代码的理解C/C++ codeunsigned short checksum(unsigned short *buf,int nword){unsigned l

网际校验算法的代码的理解

C/C++ code
    unsigned short checksum(unsigned short *buf,int nword)    {        unsigned long sum;                for(sum=0;nword>0;nword--)            sum += *buf++;    sum = (sum>>16) + (sum&0xffff);        sum += (sum>>16);             return ~sum;    }

其中,以下代码,我没有理解,求高手详细解答,感谢分享!
C/C++ code
sum = (sum>>16) + (sum&0xffff);        sum += (sum>>16);   
 


[解决办法]
可以将unsigned long sum;看成两个unsigned short
设为unsigned short sum1;(高位),unsigned short sum2;(低位)
sum>>16即为sum1,sum&0xffff即为sum2
也就是说除了原来buf的加运算,每次得到的结果unsigned short溢出的部分也参与 加 运算