Maison >développement back-end >C++ >Pourquoi le dépassement d'entier entraîne-t-il un comportement différent pour les entiers signés et non signés ?
Comprendre le débordement d'entier signé/non signé
Dans le processus d'apprentissage du débordement d'entier en C, les questions suivantes se sont posées :
Pourquoi est-ce que j'obtiens ces résultats avec un entier signé/non signé débordement ? :
Comprendre le débordement d'entier en C nécessite une compréhension des mots signés et types d'entiers non signés.
#include <iostream> int main() { int x(0); std::cout << x << std::endl; x = x + 2147483647; std::cout << x << std::endl; x = x + 1; std::cout << x << std::endl; std::cout << std::endl; unsigned int y(0); std::cout << y << std::endl; y = y + 4294967295; std::cout << y << std::endl; y = y + 1; std::cout << y << std::endl; }Remplacement d'entier signé :
Le dépassement d'entier signé est considéré comme un
0 2147483647 -2147483648 0 4294967295 0comportement non défini
, ce qui signifie que le compilateur est il n'est pas nécessaire de spécifier le comportement exact lorsqu'un entier signé déborde. En pratique, la plupart des implémentations stockent les signés. entiers utilisant la représentation du complément à 2. Cela signifie que lorsqu'un entier signé déborde, sa valeur "s'enroule" dans la plage négative. Dans l'exemple, l'ajout de 1 à l'entier positif maximum (2147483647) à l'aide d'un entier signé donne -2147483648, le résultat. entier négatif minimum.
Entier non signé Débordement :
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!