读书人

大伙来看看这个函数 求教

发布时间: 2013-04-26 16:27:53 作者: rapoo

大家来看看这个函数 求教

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);……

读书人网 >C++

热点推荐