Поиск…


Вступление

Оператор ~ смотрит на двоичное представление значений выражения и выполняет на нем побитовое отрицание.

Любая цифра, которая равна 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow