7
votes

C # Liste .BinarySearch Valeur de retour lorsque la valeur non trouvée

Je suis confus sur la méthode BinarySearch de Liste au cas où l'élément n'existe pas.

J'ai xxx

thelist.binaireSearch (0) retourne 0 et thelist.binaireSearch (3) Retours 1, comme prévu.

Cependant, thelist.binaireSearch (1) retourne -2 , 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. "

un" complément bitwise "? Qu'est-ce que je manque ici et pourquoi est-ce que thelist.binaireSearch (1)! = -1 ?


2 commentaires

Je suppose que vous recherchez thelist.binaireSearch (2) ? 1 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.


4 Réponses :


1
votes

Pour le transformer en un point d'insertion, prenez le complément bitwise, c'est-à-dire: ~ retval


0 commentaires

6
votes

Premier - pourquoi vous attendriez-vous -1? Si l'élément est le premier élément, il ne peut pas renvoyer -0 (pour les entiers), il est donc de sorte que cela reste à la raison 2 sera renvoyé pour le deuxième élément.

Ensuite, vous pouvez facilement obtenir le bon index en utilisant ~ -2 - l'opérateur binaire non.


0 commentaires

8
votes

Je suppose que vous parlez de thelist.binaireSearch (2) , car 1 existe et la valeur de retour doit être 0 .

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 ~~ a = A = a implique directement cet extrait: xxx


0 commentaires

2
votes

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.


1 commentaires

Intéressant, je me demandais quelle était l'utilisation de ce complément bitwise ... L'explication dans la documentation est assez obscure