Frage

#include <stdio.h>

int main(void) 
{
    long long x = test();
    printf("%lld\n", x);

    return 1;
}

long long test()
{   
    return 1111111111111111111;
} 

Der Ausgang beträgt 734294471. Wenn ich den Anruf ersetzt test() Durch die Zahl ist die Ausgabe so wie ich es erwarte. Ich habe den Wert von X mit einem Debugger überprüft und der von der Funktion zurückgegebene zu Wert festgelegt. Was läuft schief?

Ich verwende Visual Studio 2010 mit dem Visual C ++ - Compiler.

War es hilfreich?

Lösung

Sie müssen deklarieren test Bevor Sie es nennen, nimmt C an, dass es zurückgibt int.

Andere Tipps

IIRC, eine lange lange Konstante in C/C ++, wird von 'll' suffixiert.

long long test() {
    return 1111111111111111111LL;
}

Ihr Compiler behandelt Ihre Konstante als 32-Bit-Länge (wenn Sie Ihr konstantes Modulo 2^32 nehmen, erhalten Sie 734294471.)

Versuchen Sie, LL zu Ihrem Rückgabewert hinzuzufügen:

long long test()
{   
    return 1111111111111111111LL;
} 

Fügen Sie das Suffix LL zu Ihrem wörtlichen Fügen und sehen Sie, was passiert. Vermutlich verfolgt der Compiler das Literal zu einem int. Erhalten Sie Warnungen vom Compiler?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top