K&R II C Programming ANSI C book で、">>" および "<<" 演算子がビットを制御することを読みました。パケットを手動で構築する方法を考え出すことに興味を持ち、次のスニペットに出くわしました。
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
明らかにこれは私のスキルの範囲外ですが、このスニペットをスニペットとして使用して、未回答の質問を解決できると考えました。ビット単位の演算子を使用して特定の値を取得するタイミングはいつわかりますか?足し算 (+) または引き算 (-) だけではどうですか? また、 2 つの演算子がない場合、なぜ の&0xffff
横に16 進数があるのですか?sum
PS とは~sum
どういう意味ですか?