2010-03-10 2 views
5

Ich arbeite an einem Projekt mit c Programmierung für meinen Mathematikkurs an der Universität. Ich muss in der Lage sein, große Ganzzahlen zu verarbeiten, die größer sind als diejenigen, die in einem 'long int' Datentyp gespeichert werden können. Also habe ich versucht ‚long long int‘ verwenden, aber wenn ich versuche, etwas wie folgt aus:'long long int' wird als 'long int' interpretiert. Wie komme ich dazu?

long long int number; 
number = 10000000000; 

Dann wird die Fehlermeldung sagt ‚Fehler: Integer-Konstante zu groß für‚lang‘Typ‘.

Ich habe andere Datentypen wie '___int64' und 'int_64t' versucht Ich habe versucht, alle Standard-C-Bibliotheken und ich bekomme immer noch das gleiche Problem.

Merkwürdig, wenn ich 'printf("LLONG_MAX = %lld\n", LLONG_MAX);' versuchen, bekomme ich diese:

LLONG_MAX = -1 

Ich bin mit Codeblöcken 8.02 auf Windows XP, aber ich bin nicht sicher, welche Version von gcc-Compiler installiert ist, da ich verwende Netzwerk-Computer auf dem Campus und ich bin nicht berechtigt, auf das Haupt-Dateisystem zuzugreifen. Ich möchte meinen Laptop nicht jeden Tag auf den Campus bringen müssen. Bitte helfen Sie! Danke

Antwort

1

In Microsoft-Umgebung verwenden printf mit dieser Syntax:

 
    __int64 i64 = 10000000000; 
    unsigned __int64 u64 = 10000000000000000000; 

    printf ("%I64d\n", i64); 
    printf ("%I64u\n", u64); 
    printf ("%I64d\n", u64); <-- note this typo 

+0

Danke! Es funktioniert jetzt :) – Eddy

3

Fügen Sie eine ll am Ende Ihrer Integer-Konstante hinzu.

+0

Ich habe das versucht. funktioniert nicht Nummer = 10000000000ll printf ("number =% LLD, Nummer); gibt mir 'Nummer = 1410065408' – Eddy

+0

Vielleicht könnten Sie festlegen, dass "ll" klein geschrieben wird "LL" statt, war ich nicht sicher, (11) [EDIT] Wenn Sie wissen, wo gcc installiert ist, können Sie "gcc -v" eingeben, um die Version zu erhalten. –

+0

Ja Entschuldigung wegen der Verwirrung. Ich bin mir nicht sicher Wie bekomme ich die Version von gcc, benutze ich Windows XP nicht linux, so dass der Befehl 'gcc' nicht in der Eingabeaufforderung erkannt wird – Eddy

0

Um, Code :: Blocks verwendet GCC als seinen üblichen Compiler. Und neuere Versionen unterstützen 64-Bit-Typen explizit.

So sollten Sie in der Lage sein zu

#include <inttypes.h> 
uint64_t unsigned64BitNumber; 
int64_t signed64BitNumber; 
0

Sie sollten long long int mit einem gcc-Compiler verwenden können, aber ich denke, es erfordern kann den c99 std Code verwenden, wo als Standard-c89-Modus sein kann. versuchen Sie --std = c99 zu Ihrem Compiler-Kommandozeile und sehen, ob das hilft :-)

+0

Das ist zusätzlich zu pavpanchekhas Antwort – PinkyNoBrain

+0

Sorry, ich bin ein bisschen wie ein Newb, ich bin Ich benutze keine Befehlszeile Ich klicke einfach auf 'Build and run' in Codeblocks Wie mache ich das? – Eddy

+0

Kein Problem Es ist eine Weile her, seit ich Codeblocks benutzt habe, aber ich denke, zu den "Einstellungen" zu gelangen, dann bringt "Compiler und Debugger" das entsprechende Fenster zum Vorschein. Von dort wollen Sie die "Compiler-Einstellungen/Compiler Flags Registerkarte" und suchen und Option C99-Modus oder ISO C90 für C-Programme verwenden. Ich bin mir nicht sicher über den genauen Optionsnamen. Halfway down http://www.codeblocks.org/docs/main_codeblocks_en3.html descibes hthe Compiler-Optionen Fenster – PinkyNoBrain

0

Vielleicht ist der Compiler durch den int-Teil des Datentyps verwirrt - haben Sie versucht, stattdessen mit long long?

This website könnte Ihnen helfen.

+0

Ich habe das versucht. Ich habe auch diese Website angeschaut, was mich dazu gebracht hat, 'printf' ('LLONG_MAX =% lld "LLONG_MAX);' Es gibt mir LLONG_MAX = -1 was ziemlich seltsam ist :( – Eddy

11

Wenn der Compiler Ihre C-Datei kompiliert und auf eine Ganzzahl- oder Gleitkommakonstante stößt, muss dieser einen Typ zugewiesen werden. Es wird implizit einen Standardtyp für Sie auswählen. Sie können den Typ explizit festlegen, indem Sie dem Compiler das Ganzzahl-Suffix bereitstellen. Ein ganzzahliges Suffix kann dem Compiler mitteilen, ob es sich um einen langen, langen oder vorzeichenlosen Typ handelt.

  • 10 ist implizit eine vorzeichenbehaftete ganze Zahl
  • 10U, ist 10U explizit eine ganze Zahl ohne Vorzeichen
  • 10L, 10L ist explizit eine signierte long integer
  • 10LL, 10LL oder 10i64 auf Win32 explizit lange ein signiertes long integer
  • 10ull ist explizit ein unsigned long long

Gleitkommatypen auch diese Situation haben. Ein Typ kann entweder ein Float, ein Double oder ein Long Double sein. Ein Fließkommatyp ist normalerweise doppelt vorhanden.

  • 10,0 ist implizit eine doppelte
  • 10.0f oder 10.0F ist explizit ein Schwimmer
  • 10.0l oder 10.0L ist explizit eine lange Doppel
0

Zusätzlich zu den vorherigen Kommentare über Suffixe und gcc C99-Modus, wenn Sie nicht lange lange arbeiten können, und Sie brauchen nur ganze Zahlen bis zu 2^52, können Sie mit der Verwendung von Doppel wegkommen. Ganzzahlen bis zu 2^52 sollten genau als doppelt darstellbar sein, unter der Annahme eines IEEE-Doppelpräzisions-Formats (0 +1 Vorverzerrungs-Exponent).

0

Da die Menschen bereits gebucht, sollten Sie überprüfen, was Compiler Sie verwenden. In Code: Blockiert Sie tun (sowieso in meiner Version, hoffentlich wird es auch für Sie arbeiten):

zuerst herausfinden, was Compiler für das Projekt ausgewählt wird durch Auswahl Project-> Build-Optionen ... und sehen, was es heißt im "Selected Compiler"

Dann wählen Sie: Einstellungen-> Compiler und Debugger ... und wählen Sie den Compiler, den Sie gerade herausgefunden haben. Klicken Sie dann auf "Toolchain Executables" und sehen Sie, was es für z. "C-Compiler".

Vielleicht, wenn Sie erfolgreich sind, und Ihre Ergebnisse veröffentlichen, kann jemand hier Ihnen helfen.