(Für mich) unverständliches Ergebnis bei binärem Operator ~
-
long long == __int64 == 64bit? So stehts in der msdn?
-
ich tip mal darauf,d ass der ausdruck (1<<63) zunächst als long ausgewertet und dann nach long long gecastet wird. wenn das so ist, müsste
long long a = (long long)1 << 63;
eigentlich funktionieren.
-
oder so
stimmt.
-
Danke, jetzt gehts... Aber warum glaubst du, 1 wird als long gewertet? Ich würde eher auf int tippen...
Aber dann bitte:long long a=(static_cast<long long>(1)<<63);
Hast du nicht mehr effektiv c++ gelesen?
Das Ergebnis ist übrigens 4611686018427387904...
/edit:Kann net sein, wenn ich um 64 verschiebe komt -9...
-
ness schrieb:
Danke, jetzt gehts... Aber warum glaubst du, 1 wird als long gewertet? Ich würde eher auf int tippen...
Das ist egal, weil sizeof(int) == sizeof(long) auf 32-Bitsystemen
Aber dann bitte:
long long a=(static_cast<long long>(1)<<63);
Hast du nicht mehr effektiv c++ gelesen?
Das Ergebnis ist übrigens 4611686018427387904...
/edit:Kann net sein, wenn ich um 64 verschiebe komt -9...Wenn du um 64-Bit shiftest, dann shiftest du ueber die Grenze deiner 64-Bit
Variablen hinaus. Denn auch hier gillt: zaehlen von Bit 0 bis Bit 63. Ich
wuerde sagen, dass dann das Ergebnis implementierungspezifisch ist. Hab jetzt
grad keine Lust nachzuschauen, ob der Draft sich darueber auslaesstmfg
v R