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

大伙来看看这个函数 求教

2013-04-26 
大家来看看这个函数 求教unsigned long checksum(unsigned short *buf,int nword){unsigned long sumfor(

大家来看看这个函数 求教

unsigned long 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;
}


这里面sum>>16  和~sum是什么意思?(sum&0xffff)是什么意思?

[解决办法]
引用:
引用:sum>>16    右移16bit
~sum       um取非
sum&0xffff 只取sum的后16bit,前面bit全部的变为0

um取非是什么意思,能举个例子吗?

sum&0xffff 只取sum的后16bit,前面bit全部的变为0 能举例说一下吗?

假设sum = 0x11111,且为32bit则
~sum = 0xfffeeeee (即0变1,1变0)
sum&0xffff  = 0x1111

[解决办法]
这个函数的意思是把buf中的数据以挨着的2个组成32bit的数累加起来,取最低的32bit checksum值。

引用:
C/C++ code?123456789unsigned long checksum(unsigned short *buf,int nword){    unsigned long sum;    for(sum=0;nword>0;nword--)        sum += *buf++;    sum = (sum>>16) + (sum&0xffff);……

热点排行