2016-06-10 13 views
2

Ich versuche, das Quadrat von int zu finden. Mein Code sieht aus wie folgt:"Int" Multiplikation in C++ mit "lang lang" Ergebnis

long long sqr=0; 
int num=77778; 
sqr= num*num; 

Das Ergebnis sollte 6049417284 gewesen sein, aber wenn ich die Ausgabe überprüfen zeigt es 1754449988. Was ist der Fehler, den ich mache? long long sollte das Ergebnis speichern können, aber warum erhalte ich einen anderen Wert?

+0

Zuerst gibt 'num * num' eine ganze Zahl (und Überläufe), die dann implizit zu long long umgewandelt wird. –

Antwort

1

Der Zwischenergebnistyp ist in diesem Fall identisch mit dem ersten Argumenttyp. Also setzt dieser Code den falschen Wert in sqr (weil Sie hier einen Integer-Überlauf haben). Versuchen Sie folgendes:

long long num = 77778; 
long long sqr = num * num; 

Ein anderer Weg, mit dem Gießen:

int num = 77778; 
long long sqr = (long long) num * num; 

Um zu verstehen, es besser können Sie diese Zeilen überprüfen:

int ia = 1, ib = 2 
double da = 1.0, db = 2.0 ; 
double ic = ia/ib; // c == 0.0, because intermediate result of division is 0 
double dc = da/db; // c == 0.5, expected result 
+0

Ich versuche den Fehler in meinem Code zu verstehen. Sollte das Ergebnis nicht korrekt mit meinem Code gespeichert werden? – roang

+1

@rowang Das Zwischenergebnis, bevor es gespeichert wird, ist dasselbe wie die Argumenttypen. –

0

Wenn Sie zwei Integer-Werte multiplizieren, wird das Ergebnis sein, ein ganzzahliger Wert Dann ist die Zuweisung von Integer-Wert zu Long Long bedeutungslos.

Also, um das gewünschte Ergebnis zu erhalten, sollte die Zahl auch lang sein.