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