私がCを学ぶために読んでいる本では、第2章で「Cプログラミング言語」を読んでいます。
本はビット単位の操作を説明しており、整数のビット数を示す関数があります。
以下は機能です...
int Bitcount(unsigned x){
int b;
for(b = 0; x != 0; x >>=1){
if(x & 01){
b++
}
}
return b;
}
次に、これを正確に述べる演習が与えられます。
「2 の補数システムでは、x &= (x-1) は x の右端の 1 ビットを削除します。理由を説明してください。この観察結果を使用して、より高速なバージョンの Bitcount を記述してください」.
問題は、「x &= (x-1)」がどのように機能するかを本当に理解できないことです。誰かが私にこれを説明できますか?または、理解を深めるのに役立つリソースに私を送ってください。私はこれを理解しようとしてきましたが、本当にできません。
どうぞよろしくお願いいたします。
また、私の質問に何か問題がある場合は、これが私の最初の投稿ですので、私の質問をより良くするのを手伝ってください.