サーチ…
前書き
〜演算子は、式の値のバイナリ表現を調べ、ビット単位の否定演算を行います。
式の1である任意の数字は、結果で0になります。式の中の0である任意の数字は結果で1になります。
〜整数
次の例は、整数にビット単位のNOT(〜)演算子を使用する方法を示しています。
let number = 3;
let complement = ~number;
complement
結果は-4になります。
式 | バイナリ値 | 10進値 |
---|---|---|
3 | 00000000 00000000 00000000 00000011 | 3 |
〜3 | 11111111 11111111 11111111 11111100 | -4 |
これを簡単にするために、関数f(n) = -(n+1)
と考えることができます。
let a = ~-2; // a is now 1
let b = ~-1; // b is now 0
let c = ~0; // c is now -1
let d = ~1; // d is now -2
let e = ~2; // e is now -3
オペレータ
Double Tilde ~~
はビット単位のNOT演算を2回実行します。
次の例は、10進数に対してビット単位のNOT(~~)演算子を使用する方法を示しています。
この例を単純にするために、10進数3.5
が使用されます。これはバイナリ形式の単純な表現です。
let number = 3.5;
let complement = ~number;
complement
結果は-4になります。
式 | バイナリ値 | 10進値 |
---|---|---|
3 | 00000000 00000000 00000000 00000011 | 3 |
~~ 3 | 00000000 00000000 00000000 00000011 | 3 |
3.5 | 00000000 00000011.1 | 3.5 |
~~ 3.5 | 00000000 00000011 | 3 |
これを単純化するために、関数f2(n) = -(-(n+1) + 1)
とg2(n) = -(-(integer(n)+1) + 1)
と考えることができる。
f2(n)は整数をそのまま残す。
let a = ~~-2; // a is now -2
let b = ~~-1; // b is now -1
let c = ~~0; // c is now 0
let d = ~~1; // d is now 1
let e = ~~2; // e is now 2
g2(n)は基本的に正の数を下に、負の数を上にします。
let a = ~~-2.5; // a is now -2
let b = ~~-1.5; // b is now -1
let c = ~~0.5; // c is now 0
let d = ~~1.5; // d is now 1
let e = ~~2.5; // e is now 2
数値以外の値を数値に変換する
~~
数値以外の値にも使用できます。数値式は最初に数値に変換され、次にビット単位のNOT演算が実行されます。
式を数値に変換できない場合は、 0
変換され0
。
true
とfalse
ブール値は例外です。 true
は数値1
として、 false
は0
として表示されます
let a = ~~"-2"; // a is now -2
let b = ~~"1"; // b is now -1
let c = ~~"0"; // c is now 0
let d = ~~"true"; // d is now 0
let e = ~~"false"; // e is now 0
let f = ~~true; // f is now 1
let g = ~~false; // g is now 0
let h = ~~""; // h is now 0
簡略
私たちは~
をいくつかの日常的なシナリオの省略表現として使うことができます。
~
-1
を0
に変換するので、配列のindexOf
と一緒に使用できます。
の指標
let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}
or
if (items.indexOf('a') >= 0) {}
次のように書き直すことができます
if (~items.indexOf('a')) {}
〜10進数
次の例は、10進数に対してビット単位のNOT(〜)演算子を使用する方法を示しています。
この例を単純にするために、10進数3.5
が使用されます。これはバイナリ形式の単純な表現です。
let number = 3.5;
let complement = ~number;
complement
結果は-4になります。
式 | バイナリ値 | 10進値 |
---|---|---|
3.5 | 00000000 00000010.1 | 3.5 |
〜3.5 | 11111111 11111100 | -4 |
これを簡単にするために、関数f(n) = -(integer(n)+1)
と考えることができます。
let a = ~-2.5; // a is now 1
let b = ~-1.5; // b is now 0
let c = ~0.5; // c is now -1
let d = ~1.5; // c is now -2
let e = ~2.5; // c is now -3