Ricerca…
introduzione
L'operatore ~ guarda la rappresentazione binaria dei valori dell'espressione e fa un'operazione di negazione per bit su di esso.
Qualsiasi cifra che sia 1 nell'espressione diventa 0 nel risultato. Qualsiasi cifra che è 0 nell'espressione diventa 1 nel risultato.
~ Integer
Il seguente esempio illustra l'uso dell'operatore NOT bit (~) bit su numeri interi.
let number = 3;
let complement = ~number;
Il risultato del numero di complement uguale a -4;
| Espressione | Valore binario | Valore decimale |
|---|---|---|
| 3 | 00000000 00000000 00000000 00000011 | 3 |
| ~ 3 | 11111111 11111111 11111111 11111100 | -4 |
Per semplificare questo, possiamo pensarlo come funzione 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
~~ Operatore
Double Tilde ~~ eseguirà due volte un'operazione NOT bit a bit.
Nell'esempio seguente viene illustrato l'utilizzo dell'operatore NOT bit (~~) per bit sui numeri decimali.
Per mantenere l'esempio semplice, verrà utilizzato il numero decimale 3.5 , a causa della sua semplice rappresentazione in formato binario.
let number = 3.5;
let complement = ~number;
Il risultato del numero di complement uguale a -4;
| Espressione | Valore binario | Valore decimale |
|---|---|---|
| 3 | 00000000 00000000 00000000 00000011 | 3 |
| ~~ 3 | 00000000 00000000 00000000 00000011 | 3 |
| 3.5 | 00000000 00000011.1 | 3.5 |
| ~~ 3.5 | 00000000 00000011 | 3 |
Per semplificare questo, possiamo pensarlo come funzioni f2(n) = -(-(n+1) + 1) e g2(n) = -(-(integer(n)+1) + 1) .
f2 (n) lascerà il numero intero così com'è.
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) essenzialmente arrotonderà i numeri positivi verso il basso e quelli negativi verso l'alto.
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
Conversione di valori non numerici in numeri
~~ Potrebbe essere utilizzato su valori non numerici. Un'espressione numerica verrà prima convertita in un numero e quindi eseguita un'operazione NOT bit a bit su di esso.
Se l'espressione non può essere convertita in valore numerico, verrà convertita in 0 .
true valori bool true e false sono eccezioni, laddove il true è presentato come valore numerico 1 e false come 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
abbreviazioni
Possiamo usare ~ come una scorciatoia in alcuni scenari di tutti i giorni.
Sappiamo che ~ converte da -1 a 0 , quindi possiamo usarlo con indexOf su array.
indice di
let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}
or
if (items.indexOf('a') >= 0) {}
può essere riscritto come
if (~items.indexOf('a')) {}
~ Decimale
Nell'esempio seguente viene illustrato l'utilizzo dell'operatore NOT per bit (~) sui numeri decimali.
Per mantenere l'esempio semplice, verrà utilizzato il numero decimale 3.5 , a causa della sua semplice rappresentazione in formato binario.
let number = 3.5;
let complement = ~number;
Il risultato del numero di complement uguale a -4;
| Espressione | Valore binario | Valore decimale |
|---|---|---|
| 3.5 | 00000000 00000010.1 | 3.5 |
| ~ 3.5 | 11111111 11111100 | -4 |
Per semplificare questo, possiamo pensarlo come funzione 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