Je suis confus sur la méthode BinarySearch de J'ai p> Cependant, un" complément bitwise "? Qu'est-ce que je manque ici et pourquoi est-ce que Liste
thelist.binaireSearch (0) code> retourne 0 et
thelist.binaireSearch (3) Code> Retours 1, comme prévu. p>
thelist.binaireSearch (1) code> retourne -2 strong>, et pas -1 comme je m'attends . Le manuel MSDN dit:
"Valeur de retour: l'index de l'élément zéro dans la liste triée, si l'élément est trouvé; sinon, un nombre négatif qui est le complément bit dans le sens de l'index de l'élément suivant supérieur à l'article ou, s'il n'y a pas de plus grand Élément, le complément bitwise du nombre. " p>
thelist.binaireSearch (1)! = -1 code>? P> p>
4 Réponses :
Pour le transformer en un point d'insertion, prenez le complément bitwise, c'est-à-dire: ~ retval code> p>
Premier - pourquoi vous attendriez-vous -1? Si l'élément est le premier élément, il ne peut pas renvoyer Ensuite, vous pouvez facilement obtenir le bon index en utilisant -0 code> (pour les entiers), il est donc de sorte que cela reste à la raison 2 sera renvoyé pour le deuxième élément. P>
~ -2 code> - l'opérateur binaire non. P>
Je suppose que vous parlez de Le opérateur de complément bitwise ne produit pas le même effet que de nier l'entier , ce qui, je pense, est la source de votre confusion. Dans tous les cas, vous n'avez pas besoin de comprendre comment l'opérateur fonctionne avec précision sur le résultat de la recherche; Le paragraphe MSDN de votre question et le fait que thelist.binaireSearch (2) code>, car
1 code> existe et la valeur de retour doit être
0 code>.
~~ a = A = a code> implique directement cet extrait: p>
La raison du retour de ces indices négatifs consiste à prendre en charge l'insertion d'éléments qui ne figurent pas dans la liste. Dans cet exemple, 2 serait inséré à Index = 2. Sinon, vous devrez effectuer une autre recherche binaire pour trouver cette position. P>
Intéressant, je me demandais quelle était l'utilisation de ce complément bitwise ... L'explication dans la documentation est assez obscure
Je suppose que vous recherchez
thelist.binaireSearch (2) code>?
1 code> est juste là ...
Le complément bitwise est simplement un nombre qui est le complément de chaque bit du premier numéro. 00110101 = ~ 11001010. C'est comme une non opération, mais où! Un booléen n'est-il pas sur toute la valeur, ~ ne fait pas de chaque morceau.