2

私が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)」がどのように機能するかを本当に理解できないことです。誰かが私にこれを説明できますか?または、理解を深めるのに役立つリソースに私を送ってください。私はこれを理解しようとしてきましたが、本当にできません。

どうぞよろしくお願いいたします。
また、私の質問に何か問題がある場合は、これが私の最初の投稿ですので、私の質問をより良くするのを手伝ってください.

4

4 に答える 4

0

x の右端の 1 ビットを詳しく見てみましょうx = AAAAAA10000..0。ここで、AAAAAA は任意のビットです。それからx-1 = AAAAAA01111..1。これら 2 つの式のビットごとの AND により、 が得られAAAAAA00000..0ます。これは、右端のゼロ以外のビットをリセットする方法です。

于 2013-06-21T15:07:35.310 に答える