Recherche…


Introduction

L'opérateur ~ examine la représentation binaire des valeurs de l'expression et effectue une opération de négation binaire sur celle-ci.

Tout chiffre qui est un 1 dans l'expression devient un 0 dans le résultat. Tout chiffre qui est un 0 dans l'expression devient un 1 dans le résultat.

~ Entier

L'exemple suivant illustre l'utilisation de l'opérateur NOT (~) au niveau du bit sur des nombres entiers.

let number = 3;
let complement = ~number;

Le résultat du nombre de complement est égal à -4;

Expression Valeur binaire Valeur décimale
3 00000000 00000000 00000000 00000011 3
~ 3 11111111 11111111 11111111 11111100 -4

Pour simplifier cela, nous pouvons le considérer comme fonction 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

~~ Opérateur

Double Tilde ~~ effectuera deux fois l'opération NON bit à bit.

L'exemple suivant illustre l'utilisation de l'opérateur NOT (~~) bit à bit sur les nombres décimaux.

Pour garder l'exemple simple, le nombre décimal 3.5 sera utilisé, en raison de sa représentation simple au format binaire.

let number = 3.5;
let complement = ~number;

Le résultat du nombre de complement est égal à -4;

Expression Valeur binaire Valeur décimale
3 00000000 00000000 00000000 00000011 3
~~ 3 00000000 00000000 00000000 00000011 3
3.5 00000000 00000011.1 3.5
~~ 3.5 00000000 00000011 3

Pour simplifier cela, nous pouvons le considérer comme des fonctions f2(n) = -(-(n+1) + 1) et g2(n) = -(-(integer(n)+1) + 1) .

f2 (n) laissera le nombre entier tel quel.

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) arrondira essentiellement les nombres positifs vers le bas et les nombres négatifs vers le haut.

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

Conversion de valeurs non numériques en nombres

~~ Peut être utilisé sur des valeurs non numériques. Une expression numérique sera d'abord convertie en un nombre, puis exécutée au niveau du bit.

Si expression ne peut pas être convertie en valeur numérique, elle sera convertie en 0 .

true valeurs booléennes true et false sont des exceptions, où true est présenté comme valeur numérique 1 et false comme 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

Sténographie

Nous pouvons utiliser ~ comme un raccourci dans certains scénarios quotidiens.

Nous savons que ~ convertit -1 en 0 , nous pouvons donc l'utiliser avec indexOf sur le tableau.

Indice de

let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}

or

if (items.indexOf('a') >= 0) {}

peut être réécrit comme

if (~items.indexOf('a')) {}

~ Décimal

L'exemple suivant illustre l'utilisation de l'opérateur NOT (~) au niveau du bit sur les nombres décimaux.

Pour garder l'exemple simple, le nombre décimal 3.5 sera utilisé, en raison de sa représentation simple au format binaire.

let number = 3.5;
let complement = ~number;

Le résultat du nombre de complement est égal à -4;

Expression Valeur binaire Valeur décimale
3.5 00000000 00000010.1 3.5
~ 3,5 11111111 11111100 -4

Pour simplifier cela, nous pouvons le considérer comme fonction 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow