2010-07-21 10 views
6

Ich habe ein kleines Problem. Im Wesentlichen der Code:Kapazität eines uint64_t?

uint64_t myInteger = 98930 * 98930; 
NSLog(@"%qu", myInteger); 

... nur wird es falsch. Ich bekomme '1197210308' als Ausgabe, was offensichtlich falsch ist. Warum passiert dies? Es kann nicht sein, dass ein uint64_t zu klein ist, da sie scheinbar auf 18 and a half quintillion gehen. Hat jemand eine Idee?

Antwort

9

Versuchen Sie, die erste Zahl Gießen so die Operation gemacht wird diese Art mit:

uint64_t myInteger = (uint64_t)98930 *98930; 
+6

Oder: 'uint64_t myInteger = 98930UL * 98930UL;' –

+0

Das war's. Es funktioniert jetzt. Vielen Dank! –

+0

Oder noch besser: UINT64_C (98930) * UINT64_C (98930) – nall

2

Ich weiß nicht viel über Objective-C, aber das gleiche in C tun, stoppen integer Aktionen bei dem Integer-Rang , so erhalten Sie einen Integer-Überlauf. Versuchen:

uint64_t myInteger = 98930LLU * 98930; 
8

98930 ist ein int, so dass Sie die Multiplikation zweier int s, die ein int gibt. Sie weisen dann eine uint64_t zu, aber es ist zu spät, Sie haben bereits die Präzision verloren. Stellen Sie sicher, dass einer der Operanden vom Typ uint64_t ist, also wird der andere zu diesem Typ gezwungen, und die Multiplikation wird als uint64_t Multiplikation ausgeführt.

+0

Das erklärt es gut, danke! –

Verwandte Themen