Dévoilement de la vraie nature des doubles inclinables (~~) en JavaScript
Dans le domaine de JavaScript, l'opérateur se démarque avec sa fonctionnalité énigmatique. Il est bien connu que le simple tilde (~) signifie NON au niveau du bit, ce qui nous laisse réfléchir : à quoi sert son doublett () ?
Contrairement à l'intuition selon laquelle il double la négation au niveau du bit, l'opérateur ~~ a un effet surprenant. Il a la capacité de tronquer la partie décimale d'un nombre, l'arrondissant ainsi vers le nombre entier le plus proche.
En coulisses, l'opérateur ~~ opère en traitant son opérande comme un entier signé de 32 bits, exécutant opérations au niveau du bit quel que soit le type réel de l'opérande (nombre, chaîne, etc.). En conséquence, la partie fractionnaire est supprimée et le résultat est toujours un nombre.
Précisément, l'opérateur ~~ simule essentiellement la fonction suivante :
function truncate(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }
Cependant, cette opération est valable vrai uniquement si la valeur de x est comprise entre -(2^31) et 2^31 - 1, inclus. En dehors de cette plage, un débordement peut se produire, conduisant à des résultats imprévisibles.
Bien que ~~ puisse s'avérer utile pour convertir rapidement des arguments de chaîne en nombres, ses limites (possibilité de débordement et comportement incorrect pour les valeurs non entières) font que c'est moins souhaitable pour la manipulation numérique. Au lieu de cela, il est généralement préférable d'utiliser x ou Number(x) à ces fins.
Déchiffrer la double négation
Comprendre l'opérateur ~~ comme négation d'une négation nécessite une plongée plus profonde dans la représentation binaire. Prenons comme exemple le nombre -43,2, représenté sous forme binaire signée (complément à deux) 32 bits :
-43.2<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub>
L'inversion de tous les bits (NOT au niveau du bit) produit :
NOT -43<sub>10</sub> = 00000000000000000000000000101010<sub>2</sub> = 42<sub>10</sub>
Appliquer à nouveau la négation entraîne :
NOT 42<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub> = -43<sub>10</sub>
Ce résultat final (-43) diffère du résultat de Math.floor(-43.2), qui serait -44. En effet, ~~ arrondit les nombres à partir de zéro, contrairement à Math.floor, qui arrondit à l'inférieur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!