Qu'est-ce que data (number), si la sortie requise de l'instruction suivante est: AMAZING?c puzzle (if statement)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Qu'est-ce que data (number), si la sortie requise de l'instruction suivante est: AMAZING?c puzzle (if statement)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Il faudrait être la valeur minimale d'un nombre entier, à savoir 0x80000000 si elle est 32 bits, parce que c'est le seul numéro autre que zéro qui reste le même lorsque réduit à néant.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Résultat:
AMAZING
Comme Richard Pennington a à juste titre, cela fonctionne à cause de la représentation two's complement des nombres négatifs. Le plus grand nombre positif représentable est un plus petit en valeur absolue que le plus grand nombre négatif, donc si vous essayez de nier le plus grand nombre négatif, il déborde un int et s'enroule, en redonnant le même nombre.
Pour les ordinateurs qui utilisent one's complement, la valeur négative de chaque nombre représentable peut également être représentée sans débordement, de sorte que ce puzzle n'a pas de solution.
J'ai essayé cela sur mon UNIVAC 1100 après ajustement pour les entiers 36 bits (0x800000000) et cela n'a pas fonctionné! –
@Richard, selon Wikipedia pour UNIVAC: Les nombres étaient binaires avec des valeurs négatives dans le complément. http://en.wikipedia.org/wiki/UNIVAC_1101 Donc ça ne marchera pas! Cela ne fonctionne que dans le complément à deux. –
@Mark: Je sais. Commentaire de truc. ;-) –
Cela dépend de la taille d'un entier et de la façon dont les entiers sont implémentés, mais sur une machine à complément à deux avec des entiers de 2 octets, la réponse est -32768.
Eh bien, c'est si vous Je vais faire le tour en supposant que CHAR_BIT est 8. –
Je ne sais pas quelle est la taille de int dans ma machine. donc j'utilisé un programme pour trouver la valeur maximum de int comme
void main()
{
int i;
do{
}while(i>i++);
printf ("data=%d",i);
}
J'ai trouvé la valeur maximale de i = -2147483648
assigner à des données ceci étant ..
Vous imprimez l'adresse ('& i') au lieu de la valeur (' i'). – finnw
je teste ceci sur Borland C++ 5.5.1 pour Windows 32 sur Windows XP machine – chinnagaja
Oui ... maintenant je comprends mon erreur, je suis vraiment désolé de poster ceci, totalement une grosse erreur de ma part :( – chinnagaja
devoirs par hasard ? – Paolo
Voir http://en.wikipedia.org/wiki/Quantum_suicide_and_immortality – AaronLS
@aaronls - Lien astucieux, mais qu'est-ce que cela a à voir avec la question? –