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 の使用法を誤解していますか?