C言語なら、俺に聞け! <9>
■ このスレッドは過去ログ倉庫に格納されています
0574デフォルトの名無しさん
NGNG演習2-9で分からないところがあるので、おしえていただきたいのです。
コードの改良は、
int bitcount (unsigned x)
{
int b;
for (b=0;(x=(x & (x-1)) != 0;b++)
;
return b;
}
でいいんじゃないかと思うのですが、
2の補数システムではなぜそうなるか、の説明がよくわかんないです。
最も右の1ビットから下位ビットが1の補数となり、&によって、0がセットされるため、
最も右の1ビットが消える。
では、ちょっと的外れのようなので、正しい理由を教えていただきたく思います。
もちろん、コードの間違いもありましたら、お願いします。
■ このスレッドは過去ログ倉庫に格納されています