首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-06-13 
网际校验算法的代码的理解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溢出的部分也参与 加 运算

热点排行