私はあなたが意味すると信じています

本の表紙に見られるように、Hacker's Delightの記号は、左シフトではなく左回転を意味し、間違った結果と反対票を生み出します。
この方法が機能するのは、ローテーションによってxのすべての2進数がすべての用語ですべての可能なビットに表示され、2の補数があるためです。
もっと簡単な例を見てみましょう。2進数が4桁しかない数値を考えてみましょう。この場合、数字はとして表すことができABCD
、合計は次のことを意味します。
ABCD // x <<rot 0
+ BCDA // x <<rot 1
+ CDAB // x <<rot 2
+ DABC // x <<rot 3
すべての列にA、B、C、Dがすべて含まれていることに注意してください。これは、ABCD
実際には「2³A+2²B+2¹C+2⁰D」を意味するため、合計は次のようになります。
2³ A + 2² B + 2¹ C + 2⁰ D
+ 2³ B + 2² C + 2¹ D + 2⁰ A
+ 2³ C + 2² D + 2¹ A + 2⁰ B
+ 2³ D + 2² A + 2¹ B + 2⁰ C
——————————————————————————————————————————————————————
= 2³(A+B+C+D) + 2²(B+C+D+A) + 2¹(C+D+A+B) + 2⁰(D+A+B+C)
= (2³ + 2² + 2¹ + 2⁰) × (A + B + C + D)
(A + B + C + D)はxの人口数であり、(2³+2²+2¹+2⁰)= 0b1111は2の補数で-1であるため、合計は人口数の負数になります。
引数は、32ビットの数値に簡単に拡張できます。