Maison >développement back-end >C++ >Pourquoi `size() - 1` renvoie-t-il un grand nombre positif pour les vecteurs C vides ?

Pourquoi `size() - 1` renvoie-t-il un grand nombre positif pour les vecteurs C vides ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 06:30:14370parcourir

Why Does `size() - 1` Return a Large Positive Number for Empty C   Vectors?

Anomalie de taille de vecteur : pourquoi Size() - 1 n'est pas -1 pour les vecteurs vides

L'extrait de code donné démontre un comportement particulier dans Vecteurs C. Lorsqu'un vecteur est vide (c'est-à-dire size() == 0), soustraire 1 de sa taille renvoie un grand nombre positif au lieu du -1 attendu.

La cause

La clé pour comprendre ce comportement réside dans le type de données vector::size(). Il est défini comme size_t, un type entier non signé. Contrairement aux entiers signés, les entiers non signés ne peuvent pas représenter des valeurs négatives.

Le deuxième cout : que se passe-t-il ?

Lorsque vous soustrayez 1 de la taille d'un vecteur vide (qui est 0) , le résultat déborde et revient à la plus grande valeur possible pour un entier non signé. En effet, les entiers non signés utilisent tous leurs bits pour représenter des valeurs positives, et lorsqu'ils débordent, ils recommencent à 0.

Exemple

Dans l'exemple de code, valeur .size() vaut 0 et value.size() - 1 déborde vers 18446744073709551615, qui est le valeur maximale pour un entier non signé de 64 bits (2 ^ 64 - 1).

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