Поиск…
Вступление
Оператор ~ смотрит на двоичное представление значений выражения и выполняет на нем побитовое отрицание.
Любая цифра, которая равна 1 в выражении, становится 0 в результате. Любая цифра, которая является 0 в выражении, становится 1 в результате.
~ Целое число
Следующий пример иллюстрирует использование побитового оператора NOT (~) для целых чисел.
let number = 3;
let complement = ~number;
Результат номера complement
равен -4;
выражение | Двоичное значение | Десятичное значение |
---|---|---|
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 (~~) для десятичных чисел.
Чтобы сохранить простой пример, будет использоваться десятичное число 3.5
, что приведет к простому представлению в двоичном формате.
let number = 3.5;
let complement = ~number;
Результат номера complement
равен -4;
выражение | Двоичное значение | Десятичное значение |
---|---|---|
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
Преобразование нечисловых значений в номера
~~
Может использоваться для нечисловых значений. Числовое выражение будет сначала преобразовано в число, а затем выполнено побитовое НЕ на нем.
Если выражение не может быть преобразовано в числовое значение, оно преобразуется в 0
.
true
и false
значения bool являются исключениями, где 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
Shorthands
Мы можем использовать ~
как сокращение в некоторых повседневных сценариях.
Мы знаем, что ~
преобразует -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')) {}
~ Десятичный
Следующий пример иллюстрирует использование побитового оператора NOT (~) для десятичных чисел.
Чтобы сохранить простой пример, будет использоваться десятичное число 3.5
, что приведет к простому представлению в двоичном формате.
let number = 3.5;
let complement = ~number;
Результат номера complement
равен -4;
выражение | Двоичное значение | Десятичное значение |
---|---|---|
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