Selon ce link, l'exécution de l'opération de division INT_MIN/-1 entraînera la fin du programme dans les CPU i386. Mon processeur est d'architecture 32 bits et j'utilise le compilateur GCC. J'ai fait les expériences suivantes pour le vérifier.Quelle est la différence entre effectuer une opération de division sur les constantes et les variables
int a = INT_MIN;
int b = -1;
int c = a/b;
printf("%d\n",c);
Selon les informations spécifiées dans le lien ci-dessus de ce programme obtient lancer une exception mis fin à virgule flottante. Mais ce n'était pas pareil quand je l'ai essayé d'une manière différente.
int c = INT_MIN/-1;
printf("%d\n",c);
Le compilateur a jeté l'avertissement suivant après la compilation de ce programme.
iso.c: En fonction « principale »:
iso.c: 6: 18: avertissement: débordement d'entier dans l'expression [-Woverflow]
int c = INT_MIN/-1;
_____________^
Mais je suis la sortie -2147483648. Encore une fois, j'ai fait plus de deux expériences.
int a = INT_MIN;
int b = -1;
printf("%d\n",a/b);
Ce fut une exception à virgule flottante.
printf("%d\n",INT_MIN/-1);
Ce jeté l'avertissement du compilateur suivant.
iso.c: En fonction 'principale':
iso.c: 6: 24: avertissement: débordement d'entier dans l'expression [-Woverflow]
printf ("% d \ n", INT_MIN/- 1);
__________________^
Et la sortie de ce programme a été à nouveau -2147483648.
Après avoir fait toutes ces expériences, je l'ai remarqué que résultat de l'opération de division fait directement sur des constantes diffère du résultat de l'opération de division fait sur les variables. Alors, qu'est-ce qui fait exactement la différence?
Les compilateurs peuvent être intelligents et reconnaissent que cette partie 'int a = INT_MIN; int b = -1; int c = a/b; 'peut être fait par le compilateur, pas par le CPU, donc vous avez déjà un résultat lors de l'exécution du programme et la divison n'est même pas effectuée. D'autre part, si la valeur de la variable n'est pas connue avant la division ('scanf' pour la valeur de lecture d'entrée) alors l'instruction de division sera faite à coup sûr. – tilz0R