Maison  >  Article  >  interface Web  >  Explication détaillée de l'opérateur JS "!~"

Explication détaillée de l'opérateur JS "!~"

怪我咯
怪我咯original
2017-07-04 15:22:003089parcourir

Cet article présente principalement l'opérateur javascript"!~" en détail. Après avoir travaillé pendant plusieurs années, même les bases le sont. parti. Quand les gens le demanderont, ils riront généreusement.

C'est presque les vacances du Nouvel An, et je suis enfin libre. Je parcours quotidiennement divers articles techniques, et cet état est génial.

J'ai lu un article sur js dans l'après-midi, et le paragraphe suivant a retenu mon attention.

Le code est le suivant :

(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//如果存在则不添加
            names.push(name);
        console.log(names);// ["linkFly"]
    }
}())('linkFly');

If (!~names.indexOf(name)) Que fait l'opérateur "!~" dans if (!~names.indexOf(name )) tu veux dire ? Si tu ne comprends pas, commence par ~.

Le test peut montrer que la valeur du résultat a ce modèle - (X+1)

Recherche , et certains articles ne manquent qu'une phrase : nier le chiffre binaire

Littéralement, il s'exprime en binaire à huit chiffres : 3=00000011, puis ~3=11111100, il est faux d'appliquer la formule ci-dessus.
L'explication ci-dessus est encore trop abstraite et peu concrète. En fait, cela implique la connaissance du code original, du code inverse et du code complémentaire.

Code original
Le bit le plus élevé de la représentation du code original est le bit de signe. Ce bit est 0 pour les nombres positifs et 1 pour les nombres négatifs. Les bits restants représentent la valeur absolue du nombre.
Code complément à un
Pour un nombre signé, le complément à un d'un nombre positif est le même que son code d'origine ; le complément à un d'un nombre négatif est l'inversion au niveau du bit de chaque bit du code d'origine sauf le signe. peu. Le code complément est souvent utilisé comme forme intermédiaire dans le processus de recherche du code complément.
Code complémentaire
Le code complémentaire d'un nombre positif est le même que son code d'origine et son code inverse ; le code complémentaire d'un nombre négatif est obtenu en inversant tous les bits de son code d'origine sauf le bit de signe et en ajoutant 1. au dernier bit, qui est Ajouter 1 au complément du nombre. Les nombres dans les ordinateurs sont généralement représentés sous la forme d’un complément à deux. Dans le code complémentaire, (-128)D est utilisé à la place de (-0)D. Notez que : (-128)D n'a pas de code original correspondant ni de code complété, (-128)D = (1000,0000)B.
Opération complément
L'opération complément ne prend pas en compte le bit de signe, elle est obtenue en inversant chaque bit de son code d'origine et en ajoutant 1 au dernier bit. Le complément d'un nombre est le complément de son contraire.

Prenons l'exemple de l'article de l'auteur et comprenez que

~ signifie négation au niveau du bit La négation signifie que si c'est 00111, il devient 11000 (négation au niveau du bit)

Le binaire. la représentation de 57 est (1 octet) : 00111001
La représentation binaire de (~57) après inversion bit à bit : 11000110 Ceci est exprimé en décimal : -70
Ceci est un nombre négatif et un nombre signé, les nombres négatifs sont représenté par leur complément dans les ordinateurs : complément = inversion au niveau du bit du bit de signe puis ajout de 1.
Donc -70 (11000110) l'inversion au niveau du bit du bit de signe est (10111001) plus 1 est (10111010)
converti en decimal:-58
Donc ~57=-58

Maintenant, je comprends enfin. Même si la formule résumée peut rapidement produire des résultats, elle ne peut expliquer pourquoi. En tant que techniciens, nous aimons entrer dans les détails.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn