(Für mich) unverständliches Ergebnis bei binärem Operator ~



  • long long == __int64 == 64bit? So stehts in der msdn?


  • Mod

    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 auslaesst 🙂

    mfg
    v R


Anmelden zum Antworten