1

次のコードを実行しようとしましたが、奇妙な結果が得られました:

echo ~1; // gives -2
echo ~2; // gives -3

おそらく、数値が正か負かを説明するビットがありますか?

4

2 に答える 2

6

魔法や奇妙な出力はありませんが、否定の定義から来ています

10 進数のビットごとの補数は、数値の否定から 1 を引いたものです。

そのマニュアルから:-

負の 10 進数 (例: -3) を 2 進数に変換するには、3 つの手順が必要です:-

  • 1) 10 進数の正のバージョンを 2 進数に変換します (つまり、3 = 0011)。

  • 2) ビットを反転します (つまり、0011 が 1100 になります)

  • 3) 1 を追加 (つまり: 1100 + 0001 = 1101)

1101 = -3 がどうなるか疑問に思うかもしれません。PHP は「2 の補数」という方法を使用して、負の 2 進数をレンダリングします。一番左のビットが 1 の場合、2 進数は負であり、ビットを反転して 1 を追加します。0 の場合は正であり、何もする必要はありません。したがって、0010 は正の 2 になります。1101 の場合は負であり、ビットを反転して 0010 を取得します。1 を追加すると、-3 に等しい 0011 が取得されます。

于 2013-07-03T10:22:51.020 に答える
1

演算子~は、数値の 2 の補数を計算します。

ウィキペディアで、2 の補数とその計算方法に関する詳細情報を見つけることができます。

于 2013-07-03T10:20:16.133 に答える