int は 2 の補数で 32 ビットであると想定できます。正当な演算子は次のとおりです。〜&^ | + << >>
この時点で、私はブルートフォースを使用しています
int a=0x01;
x=(x+1)>>1; //(have tried with just x instead of x+1 as well)
a = a+(!(!x));
... 最後の 2 つのステートメントが 32 回繰り返されます。これにより、x が 1 桁シフトされるたびに a に 1 が追加され、32 ビットすべてに対して != 0 になります。
テスト コンパイラを使用すると、テスト ケース 0x7FFFFFFF (0 の後に 31 個の 1 が続く) でメソッドが失敗し、この数値を表すには 32 ビットが必要であると表示されます。これが 31 ではない理由がわかりません (私の方法で計算します) 誰か理由を説明できますか? そして、これを説明するために何を変更する必要がありますか?