問題 : 非負の整数が2^j - 2^k where j>=k>=02 のべき乗の差などの形式であるかどうかを確認するn (say)にはfor eg. 00011110。連続する 1 のシーケンス (右端) をオフにし、 でゼロ チェックを行いnます。ここで私がすることは、steps for solution
00011110
00011111(turn on trailing 0's)
00000000(then turn off trailing 1's). この式を使用し(x | (x - 1)) & ((x | (x - 1)) + 1)ます。しかし、リテラルを使用しないより効率的な式 (おそらく操作の数が少ないため) の((x & -x) + x) & x後にゼロチェックが続きます。そして、私はこれを理解できませんが、同じことを行うと書かれていますが、私の結果から式を導き出すことはできません. 誰かが私にこれを説明できますか?
EDIT : 32 ビット ワード、2 の補数