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 を比較する理由です。