Was ist Daten (Nummer), wenn die erforderliche Ausgabe von der folgenden Aussage ist: ERSTAUNLICH?c Puzzle (if-Anweisung)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Was ist Daten (Nummer), wenn die erforderliche Ausgabe von der folgenden Aussage ist: ERSTAUNLICH?c Puzzle (if-Anweisung)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Es müßte der minimale Wert eine ganze Zahl sein, d.h. 0x80000000 wenn es 32-Bits ist, denn das ist die einzige Zahl ungleich Null ist, die gleich bleibt, wenn negiert.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Ergebnis:
AMAZING
Wie Richard Pennington zu Recht darauf hingewiesen, funktioniert dies wegen der two's complement Darstellung negativer Zahlen. Die größte darstellbare positive Zahl ist um einen Wert kleiner als die größte negative Zahl. Wenn Sie also versuchen, die größte negative Zahl zu negieren, wird ein int überströmt und die gleiche Zahl zurückgegeben.
Für Computer, die one's complement verwenden, kann der negative Wert jeder darstellbaren Zahl auch ohne Überlauf dargestellt werden, so dass dieses Puzzle keine Lösung hat.
Ich versuchte dies auf meinem UNIVAC 1100 nach der Anpassung für 36 Bit Ganzzahlen (0x800000000) und es hat nicht funktioniert! –
@Richard, laut Wikipedia für UNIVAC: Zahlen waren binär mit negativen Werten in der eigenen Ergänzung. http://en.wikipedia.org/wiki/UNIVAC_1101 Das wird also nicht funktionieren! Es funktioniert nur in Zweierkomplement. –
@Mark: Ich weiß. Trick Kommentar. ;-) –
Es hängt von der Größe einer Ganzzahl ab und wie Ganzzahlen implementiert werden, aber auf einem Zweierkomplement-Computer mit 2 Byte Ganzzahlen lautet die Antwort -32768.
Nun, es ist, wenn du gehe davon aus, dass CHAR_BIT 8 ist. –
Ich weiß nicht, was die Größe von Int in meiner Maschine. so habe ich ein Programm, um den Maximalwert von int zu finden wie
void main()
{
int i;
do{
}while(i>i++);
printf ("data=%d",i);
}
ich den maximalen Wert von i gefunden = -2147483648
assign dieses Datum dies funktionieren wird ..
Sie drucken die Adresse ('& i') anstelle des Wertes (' i'). – finnw
Ich teste dies auf Borland C++ 5.5.1 für Windows 32 auf Windows XP Maschine – chinnagaja
Ja ... jetzt verstehe ich meinen Fehler, tut mir wirklich leid für die Veröffentlichung dieser, total einen großen Fehler von meinem Ende :( – chinnagaja
Hausaufgaben durch Zufall ? – Paolo
Siehe http://en.wikipedia.org/wiki/Quantum_suicide_and_immortality – AaronLS
@aaronls - Nifty Link, aber was hat es mit der Frage zu tun? –