Les vacances du Nouvel An arrive bientôt et j'ai enfin du temps libre. Je visite divers articles techniques tous les jours, et c'est dans un grand état.
J'ai lu un article sur JS dans l'après-midi, et il y a un paragraphe comme celui-ci qui a attiré mon attention.
La copie de code est la suivante:
(fonction () {
var noms = [];
return function (name) {
addName (name);
}
fonction addName (name) {
if (! ~ names.indexof (nom)) // s'il existe, n'ajoutez pas
noms.push (nom);
console.log (noms); // ["linkfly"]
}
} ()) ('linkfly');
Que signifie l'opérateur "! ~" Dans if (! ~ Names.indexof (name))? Si vous ne comprenez pas, commencez par ~ d'abord.
Les tests peuvent montrer que la valeur du résultat a cette règle - (x + 1)
Après la recherche, certains articles ne perdent qu'une seule phrase: Tournez-le inversé par binaire
De la signification littérale, nous utilisons ici la représentation binaire à huit chiffres: 3 = 00000011, alors ~ 3 = 11111100, la formule ci-dessus est erronée.
L'explication ci-dessus est encore trop abstraite et non spécifique. En fait, cela implique la connaissance du code d'origine, du code inversé et du code du complément.
Code d'origine
Le bit le plus élevé de la représentation de code d'origine est le bit de signe, qui est 0 pour indiquer un nombre positif et 1 pour indiquer un nombre négatif. Les bits restants représentent la valeur absolue du nombre.
Code inverse
Pour un numéro signé, le code inverse d'un nombre positif est le même que son code d'origine; Le code inverse d'un nombre négatif est le bit inverse des bits sauf le bit de signe. Le code inverse est souvent utilisé comme une forme intermédiaire dans le processus de recherche du code de complément.
Complément
Le complément d'un nombre positif est le même que son code d'origine et son code inverse; Le complément d'un nombre négatif consiste à inverser son code d'origine sauf le bit de signe, et à ajouter 1 au dernier bit, c'est-à-dire ajouter 1 au complément du numéro. Les nombres dans les ordinateurs sont généralement exprimés sous forme de complément. Dans le code du complément, (-128) D est utilisé à la place de (-0) d. Remarque: (-128) D n'a pas le code d'origine et le code inverse correspondant, (-128) d = (1000 000) b.
Trouver des opérations complémentaires
L'opération de complément ne tient pas compte des bits de signe, mais inverse les bits d'origine de son code d'origine et en ajoute 1 au dernier bit. Le complément d'un nombre est le complément du numéro opposé.
Prenez l'exemple de l'article de l'auteur et comprenez-le
~ signifie inversion bitwise. S'il est 00111, il devient 11000 (inversion bitwise)
La représentation binaire de 57 est (1 octet): 00111001
Binaire après l'inversion bitwise (~ 57): 11000110 Ceci est exprimé comme décimal: -70
Il s'agit d'un nombre négatif, un nombre signé. Les nombres négatifs doivent être exprimés dans l'ordinateur en utilisant leur code de complément: complément = le bit de symbole est inversé puis ajouté 1.
Par conséquent, une fois le bit de signe -70 (11000110) est inversé après le bit, il est (10111001) puis ajouter 1, c'est (10111010)
Changement du système décimal: -58
Donc ~ 57 = -58
À ce stade, je l'ai finalement compris. Bien que la formule sommaire puisse rapidement tirer des résultats, il ne peut pas expliquer pourquoi. En tant que techniciens, nous aimons étudier et aller profondément dans les détails.
Donnez le temps:
La fondation est la pierre angulaire de tous les niveaux supérieurs. Si vous vous consacrez à la pratique du taoïsme, la route est longue.
Ce qui précède est l'intégralité du contenu de cet article. J'espère que tout le monde pourra gagner quelque chose.