簡潔な答え:
関数は 10 進数を受け取り、toString()
それを 2 進数に変換し、「-」記号を追加します。
ゼロ フィル右シフトは、そのオペランドを 2 の補数形式の符号付き 32 ビット整数に変換します。
より詳細な答え:
質問1:
//If you try
(-3).toString(2); //show "-11"
関数にあります.toString()
。を介して数値を出力する場合.toString()
:
構文
numObj.toString([基数])
numObj が負の場合、符号は保持されます。これは、基数が 2 の場合でも当てはまります。返される文字列は、numObj の 2 の補数ではなく、- 記号が前に付いた numObj の正のバイナリ表現です。
10 進数を 2 進数に変換し、「-」記号を追加します。
- 10進数の「3」を2進数に換算すると「11」
- 記号を追加すると、「-11」が得られます
質問2:
// but if you fake a bit shift operation it works as expected
(-3 >>> 0).toString(2); // print "11111111111111111111111111111101"
ゼロ フィル右シフトは、オペランドを符号付き 32 ビット整数に変換します。その演算の結果は、常に符号なし 32 ビット整数です。
すべてのビット演算子のオペランドは、2 の補数形式の符号付き 32 ビット整数に変換されます。