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