Szukaj…
Wprowadzenie
Operator ~ sprawdza binarną reprezentację wartości wyrażenia i wykonuje na nim operację negacji bitowej.
Każda cyfra, która jest 1 w wyrażeniu, w wyniku staje się 0. Każda cyfra, która jest 0 w wyrażeniu, staje się 1 w wyniku.
~ Liczba całkowita
Poniższy przykład ilustruje użycie bitowego operatora NOT (~) na liczbach całkowitych.
let number = 3;
let complement = ~number;
Wynik liczby complement
wynosi -4;
Wyrażenie | Wartość binarna | Wartość dziesiętna |
---|---|---|
3) | 00000000 00000000 00000000 00000011 | 3) |
~ 3 | 11111111 11111111 11111111 11111100 | -4 |
Aby to uprościć, możemy myśleć o tym jako o funkcji 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
~~ Operator
Podwójna tylda ~~
wykona bitową operację NIE dwa razy.
Poniższy przykład ilustruje użycie bitowego operatora NOT (~~) na liczbach dziesiętnych.
Aby zachować prosty przykład, zostanie użyta liczba dziesiętna 3.5
, ponieważ jest to prosta reprezentacja w formacie binarnym.
let number = 3.5;
let complement = ~number;
Wynik liczby complement
wynosi -4;
Wyrażenie | Wartość binarna | Wartość dziesiętna |
---|---|---|
3) | 00000000 00000000 00000000 00000011 | 3) |
~~ 3 | 00000000 00000000 00000000 00000011 | 3) |
3.5 | 00000000 00000011.1 | 3.5 |
~~ 3.5 | 00000000 00000011 | 3) |
Aby to uprościć, możemy myśleć o tym jak o funkcjach f2(n) = -(-(n+1) + 1)
i g2(n) = -(-(integer(n)+1) + 1)
.
f2 (n) pozostawi liczbę całkowitą taką, jaka jest.
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) zasadniczo zaokrągli liczby dodatnie w dół, a liczby ujemne w górę.
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
Konwertowanie wartości nienumerycznych na liczby
~~
Może być stosowany w przypadku wartości nienumerycznych. Wyrażenie liczbowe zostanie najpierw przekonwertowane na liczbę, a następnie wykonane na nim bitową operację NIE.
Jeśli wyrażenie nie może zostać przekonwertowane na wartość liczbową, zostanie przekonwertowane na 0
.
true
i false
bool są wyjątkami, gdzie true
jest prezentowane jako wartość liczbowa 1
a false
jako 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
Stenografia
Możemy użyć ~
jako skrótu w niektórych codziennych scenariuszach.
Wiemy, że ~
konwertuje -1
na 0
, więc możemy używać go z indexOf
na tablicy.
indeks
let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}
or
if (items.indexOf('a') >= 0) {}
można ponownie zapisać jako
if (~items.indexOf('a')) {}
~ Dziesiętny
Poniższy przykład ilustruje użycie bitowego operatora NOT (~) na liczbach dziesiętnych.
Aby zachować prosty przykład, zostanie użyta liczba dziesiętna 3.5
, ponieważ jest to prosta reprezentacja w formacie binarnym.
let number = 3.5;
let complement = ~number;
Wynik liczby complement
wynosi -4;
Wyrażenie | Wartość binarna | Wartość dziesiętna |
---|---|---|
3.5 | 00000000 00000010.1 | 3.5 |
~ 3,5 | 11111111 11111100 | -4 |
Aby to uprościć, możemy myśleć o tym jako o funkcji 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