7
votes

Array.binaireSearch () Valeur de retour ()

J'ai le tableau suivant: xxx

pourquoi si je recherche 29.6 i get -3 < Pré> xxx

i attendu +1 ou -1 .

la documentation Array.binaireSearch () pour le paramètre de retour dit:

L'index de la valeur spécifiée dans la matrice spécifiée, si la valeur est trouvée. Si la valeur n'est introuvable et la valeur est inférieure à un ou plusieurs éléments de matrice, un numéro négatif qui est le complément binaire de l'index du premier élément supérieur à la valeur. Si la valeur n'est introuvable et la valeur est supérieure à l'un des éléments de la matrice, un numéro négatif qui est le complément bit dans le sens (l'index du dernier élément plus 1).

mais cela ne dit pas trop pour moi.


2 commentaires

Peut-être devriez-vous vous familiariser avec le complément bitwise: Stackoverflow.com/Questtions/791328/...


Vous obtenez les résultats exactement que vous êtes supposé.


3 Réponses :


11
votes

Si la valeur n'est introuvable et la valeur est inférieure à un ou plusieurs éléments de matrice, un numéro négatif qui est le complément binaire de l'indice du premier élément supérieur à la valeur.

Le premier élément supérieur à 29,6 est 100 , qui a indice de 2 .

~ 2 est -3 .


0 commentaires

6
votes

Vous pouvez utiliser le '~' pour prendre le complément bitwise qui vous donnera l'index du premier élément plus grand que l'élément de recherche.

Si le tableau ne contient pas la valeur spécifiée, la méthode renvoie un entier négatif. Vous pouvez appliquer l'opérateur de complément bitwise (~) au résultat négatif (dans Visual Basic, Xor le résultat négatif avec -1) produire un index. Si cet indice est supérieur ou égal à la taille de la matrice, il n'y a pas d'éléments plus gros que la valeur dans le déployer. Sinon, c'est l'index du premier élément qui est plus grand que la valeur. P> blockquote>

du MSDN P> Ainsi, si vous aviez: p> xxx pré>

Vous pouvez vérifier: p>

if (pos < 0)
{
     Console.WriteLine("Not found, the result was {0} which is index {1}", pos, ~pos);
}


0 commentaires

1
votes

Voici votre réponse: "Un nombre négatif qui est le complément bit dans le sens de l'indice du premier élément supérieur à la valeur."

Donc, dans votre cas, votre valeur recherchée (29.6) est inférieure à 100 qui est le 3ème élément de votre liste de matrices , le complément de 3 est -3, qui est la réponse que vous avez obtenue.

Ici, j'ai étendu votre exemple et j'ai créé une autre liste de tableau (liste2) avec certaines valeurs différentes, puis j'ai recherché la même valeur comme vous 29.6, cette valeur 29,6 est plus petite que 100 mais plus grande que 25, et dans mon tableau La liste 100 est sur la position 4 et son complément est -4.

donc je reçois le résultat -4, si j'ai cherché 20 dans ma liste de matrice, j'aurais obtenu une réponse -3. < Pré> xxx

mon code résultat: xxx

J'espère que cela aide.


0 commentaires