Buscar..


Introducción

El operador ~ observa la representación binaria de los valores de la expresión y realiza una operación de negación a nivel de bits en ella.

Cualquier dígito que sea un 1 en la expresión se convierte en un 0 en el resultado. Cualquier dígito que sea un 0 en la expresión se convierte en un 1 en el resultado.

~ Integer

El siguiente ejemplo ilustra el uso del operador NOT (~) a nivel de bits en números enteros.

let number = 3;
let complement = ~number;

El resultado del número del complement es igual a -4;

Expresión Valor binario Valor decimal
3 00000000 00000000 00000000 00000011 3
~ 3 11111111 11111111 11111111 11111100 -4

Para simplificar esto, podemos pensar que es una función 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

~~ operador

Double Tilde ~~ ejecutará la operación NO bitwise dos veces.

El siguiente ejemplo ilustra el uso del operador NOT (~~) a nivel de bits en números decimales.

Para mantener el ejemplo simple, se utilizará el número decimal 3.5 , debido a su representación simple en formato binario.

let number = 3.5;
let complement = ~number;

El resultado del número del complement es igual a -4;

Expresión Valor binario Valor decimal
3 00000000 00000000 00000000 00000011 3
~~ 3 00000000 00000000 00000000 00000011 3
3.5 00000000 00000011.1 3.5
~~ 3.5 00000000 00000011 3

Para simplificar esto, podemos imaginarlo como funciones f2(n) = -(-(n+1) + 1) y g2(n) = -(-(integer(n)+1) + 1) .

f2 (n) dejará el número entero como está.

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) esencialmente redondeará los números positivos hacia abajo y los números negativos hacia arriba.

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

Convertir valores no numéricos a números

~~ podría usar en valores no numéricos. Una expresión numérica se convertirá primero en un número y luego se ejecutará una operación NO bit a bit en ella.

Si la expresión no se puede convertir a un valor numérico, se convertirá a 0 .

true valores bool true y false son excepciones, donde true se presenta como valor numérico 1 y false como 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

Podemos usar ~ como una taquigrafía en algunos escenarios cotidianos.

Sabemos que ~ convierte -1 a 0 , por lo que podemos usarlo con indexOf en la matriz.

índice de

let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}

or

if (items.indexOf('a') >= 0) {}

puede ser reescrito como

if (~items.indexOf('a')) {}

~ Decimal

El siguiente ejemplo ilustra el uso del operador NOT (~) a nivel de bits en números decimales.

Para mantener el ejemplo simple, se utilizará el número decimal 3.5 , debido a su representación simple en formato binario.

let number = 3.5;
let complement = ~number;

El resultado del número del complement es igual a -4;

Expresión Valor binario Valor decimal
3.5 00000000 00000010.1 3.5
~ 3.5 11111111 11111100 -4

Para simplificar esto, podemos pensar que es una función 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow