javascript では、チルダ演算子はビット単位の NOT または補数ですが、なぜ次の式が期待どおりに機能しないのですか?
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
javascript では、チルダ演算子はビット単位の NOT または補数ですが、なぜ次の式が期待どおりに機能しないのですか?
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
その理由は、true
は と同等であり、取得した数値1
に対してビット単位の NOT ( ~
)を実行すると. NOT 演算子 ( ) と組み合わせると false が生成されます (NOT 演算子と組み合わせたときに true を生成する唯一の数値は であるため)1
-2
!
0
ここにあなたが面白いと思うかもしれないいくつかの情報があります
リンクから引用:
任意の数値 x をビット単位で否定すると、-(x + 1) が返されます。
~ はビット演算です:
~(true) = ~1 = 0b11111110 (8bit 文字の場合)
! ブール否定です:
!(真) = !1 = 0b00000000
x
ブール型ではないため、ゼロに設定された先行ビットの負荷があります。
~x
は、これらすべての先行ビットを に変換し1
ます。したがって、非ゼロになります。
!x
、一方、ゼロです。
tildeX == exclX
これがfalse を比較する理由です。