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
Libérer: 2024-12-10 06:30:14
original
445 Les gens l'ont consulté

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal