long long vari = 18000000000000000000; <- geht nit..
-
hallo,
ich hab grad folgendes problem gehabt:unsinged long long vari = 18000000000000000000;
da sagt mir der compiler, dass die große zahl nicht in ein long passt. ein long hat 4 byte, ist klar dass die zahl da nicht reinpasst. folgendes workaround geht:
unsinged long long vari = 1800000; vari *= 10000000; vari *= 1000000;
nun ja, dass ist nicht besonders schoen. außerdem kann man das schlecht in schleifen verwenden (mit dem workaround kann ich zB keine konstanten verwenden). gibts da vielleicht ne elegantere loesung?
mfg aman..
-
das ist keine loesung, weil der long dann ein falsches ergebnis enthaelt.
der wert "wrappt" um die bereichsgrenzen.
-
Also fuer mich sieht das aus, als ob einfach ein ll hinter 18000000000000000000 fehlt.
-
danke, das war die loesung..
hab das noch nicht gekannt..@rackwitz
warum soll da ein falscher wert drinn sein?
-
weil im computer alles modulo 2**bitbreite ablaeuft.
praktisch und anschaulich:
du hast ein 8 bit register (ohne vorzeichen) und da drin soll mal der wert 250 sein.
wenn du 10 dazuaddierst, kommt nicht 260 raus, sondern 4.
250, 251, 252, 253, 254, 255, 0, 1, 2, 3, 4
beim multiplizieren geht das genauso, es wird "umgebrochen".edit: deine grosse zahl (1.8e19) passt gerade noch in einen unsigned long long.
18446744073709551615LL passt auch noch, aber das wars dann.
-
ah, das meinst du..
wegen dem hab ich natuerlich geschaut, aber trotzdem danke..mfg aman..
-
ich bekomme folgenden fehler wenn ich long long mache:
wie geht das mit dem format????Z:\Cpp1.cpp(2) : error C2632: 'long' gefolgt von 'long' ist unzulaessig
-
"long long" ist ja auch kein Typ, der im ANSI-Standard vorgegeben ist, sondern eine Spracherweiterung des Compilers (afaik GCC).
(Bei einem Microsoft-Compiler könntest du es mal mit "__int64" versuchen)
-
CStoll schrieb:
"long long" ist ja auch kein Typ, der im ANSI-Standard vorgegeben ist, sondern eine Spracherweiterung des Compilers (afaik GCC).
long long ist schon in ANSI-C definiert, nicht aber in C++, und die Fehlermeldung oben sieht mir ziemlich nach C++ aus.