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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow