hält 2 ^ 63 -1 lang

8

Ich habe die folgenden zwei Codeabschnitte unter Windows XP (Code: Block, MinGW) und Ubuntu (11.04, G ++)

ausgeführt

Ich habe Probleme beim Ausführen des folgenden Codes

%Vor%

Diese Zahl ist 2 ^ 63 -1. Aber ich werde einen Fehler erhalten, der besagt:

  

C: \ Dokumente und Einstellungen \ JohnWong \ My   Documents \ codeblock \ 343_hw_1 \ main.cpp | 9 | Fehler: Integer-Konstante ist auch   groß für Typ "lang" |

Auf ubuntu - es kompiliert, aber die Antwort reunruned ist 9223372036854775808, beachten Sie die 8 am Ende ....

Wenn ich jetzt diesen Code benutze, bin ich mit der Power-Funktion in Ordnung.

%Vor%

Ich werde die Werte bekommen, die ich will (alles von +1 wird einen Überlauf verursachen, das ist okay).

Unter Ubuntu sehen die Ausgaben gleich aus. Gut.

Also, was ist hier los? Warum konstant ist nicht gut ??? Ich habe sogar versucht intmax_t und int64_t als Datentyp den ersten Code ausgeführt.

Kann jemand dieses Verhalten erklären? Vielen Dank!

    
CppLearner 12.09.2011, 00:59
quelle

2 Antworten

13
%Vor%

Der LL macht das Literal zu einem langen, langen Literal. Sonst ist das Literal standardmäßig ein langes Literal und wird dann lange bevor es in einem gespeichert wird, übergeben.

    
Winston Ewert 12.09.2011, 01:02
quelle
2

C ++ - Sprache hatte vor C ++ 11 keinen long long -Typ. Ihr Compiler ist anscheinend kein C ++ 11-Compiler und unterstützt long long als Erweiterung. Deshalb gibt der Compiler die Warnung aus. Es warnt Sie, dass das Literal auf eine nicht standardmäßige (erweiterte) Weise interpretiert wird, d. H. Dass beim Suchen nach dem geeigneten Typ für das Literal der Compiler die Grenzen des Sprachstandards überschreiten musste.

    
AnT 12.09.2011 01:14
quelle

Tags und Links