1

Bitwise OR を使用する必要がある単純なモジュールをプログラミングしています。私の計画は、4 つの数値を「ビットごとに OR 演算」することです。

  • 0x00000004
  • 0x00000010
  • 0x00000040
  • 0x80000000

それらをコンソールに出力して、16 進数ではなく 2 進数で視覚化しました。

0x00000004.toString(2)
"100"
0x00000010.toString(2)
"10000"
0x00000040.toString(2)
"1000000"
0x80000000.toString(2)
"10000000000000000000000000000000"

ここまでは順調ですね。それらすべてに対して Bitwise OR 演算子を一緒に使用すると、かなり奇妙な結果が得られます。

0x00000004 | 0x00000010 | 0x00000040 | 0x80000000
-2147483564

それぞれバイナリで:

(0x00000004 | 0x00000010 | 0x00000040 | 0x80000000).toString(2)
"-1111111111111111111111110101100"

私は実際にこれを期待していたので、これは私には明らかに間違っているようです:

  00000000000000000000000000000100
| 00000000000000000000000000010000
| 00000000000000000000000001000000
| 10000000000000000000000000000000
= 10000000000000000000000001010100

それぞれ10進数で:

parseInt('10000000000000000000000001010100', 2)
2147483732

または16進数で:

(2147483732).toString(16)
"80000054"

私が知らなかった制限はありますか?(私は実際に MDNのリファレンスを調べました)それともこれはバグですか? または、Bitwise OR の使用法を誤解していますか?

4

1 に答える 1