Sök…
Introduktion
Operatören ~ tittar på den binära representationen av värdena för uttrycket och utför en bitvis negationsoperation på det.
Alla siffror som är 1 i uttrycket blir 0 i resultatet. Alla siffror som är en 0 i uttrycket blir en 1 i resultatet.
~ Heltal
Följande exempel illustrerar användningen av den bitvisa INTE (~) operatören på heltal.
let number = 3;
let complement = ~number;
Resultatet av complement
lika med -4;
Uttryck | Binärvärde | Decimalvärde |
---|---|---|
3 | 00000000 00000000 00000000 00000011 | 3 |
~ 3 | 11111111 11111111 11111111 11111100 | -4 |
För att förenkla detta kan vi tänka på det som funktion 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
~ ~ Operatör
Double Tilde ~~
kommer att utföra INTE operation två gånger.
Följande exempel illustrerar användningen av den bitvisa INTE (~~) operatören på decimalnummer.
För att göra exemplet enkelt kommer decimalnumret 3.5
att användas, orsak till att det är en enkel representation i binärt format.
let number = 3.5;
let complement = ~number;
Resultatet av complement
lika med -4;
Uttryck | Binärvärde | Decimalvärde |
---|---|---|
3 | 00000000 00000000 00000000 00000011 | 3 |
~~ 3 | 00000000 00000000 00000000 00000011 | 3 |
3,5 | 00000000 00000011.1 | 3,5 |
~~ 3,5 | 00000000 00000011 | 3 |
För att förenkla detta kan vi tänka på det som funktioner f2(n) = -(-(n+1) + 1)
och g2(n) = -(-(integer(n)+1) + 1)
.
f2 (n) lämnar heltalet som det är.
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) kommer i huvudsak att runda positiva siffror nedåt och negativa siffror upp.
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
Konvertera icke-numeriska värden till siffror
~~
Kan användas på icke-numeriska värden. Ett numeriskt uttryck konverteras först till ett nummer och utförs sedan bitvis INTE operation på det.
Om uttrycket inte kan konverteras till numeriskt värde konverteras det till 0
.
true
och false
boolvärden är undantag, där true
presenteras som numeriskt värde 1
och false
som 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
short
Vi kan använda ~
som en kortfattning i vissa vardagliga scenarier.
Vi vet att ~
konverterar -1
till 0
, så vi kan använda det med indexOf
på array.
index för
let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}
or
if (items.indexOf('a') >= 0) {}
kan skrivas om som
if (~items.indexOf('a')) {}
~ Decimal
Följande exempel illustrerar användningen av den bitvisa INTE (~) -operatören på decimaltal.
För att göra exemplet enkelt kommer decimalnumret 3.5
att användas, orsak till att det är en enkel representation i binärt format.
let number = 3.5;
let complement = ~number;
Resultatet av complement
lika med -4;
Uttryck | Binärvärde | Decimalvärde |
---|---|---|
3,5 | 00000000 00000010.1 | 3,5 |
~ 3,5 | 11111111 11111100 | -4 |
För att förenkla detta kan vi tänka på det som funktion 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