unsigned __int64



  • Hallo,

    ich versuche gerade C++ zu lernen und hab schon das erste Problem.

    unsigned __int64 j = 34359738368ULL;   // = 2^35
    j = j << 1;
    

    So weit, so gut. 🙂
    Hätte jetzt gedacht, dass j=2^36.
    Warum ist das Ergebnis j=0?
    Und was muss ich ändern, um das "richtige" 🕶 Ergebnis zu erhalten.

    MfG Simon



  • das dürfte ein compilerfehler sein. welcher compiler war das?

    oder es ist ein ausgabefehler. manchmal kann der op<< nur unsigned int.



  • __int64 ist ein MSFT spezifischer 64-Bit Datentyp der longlong unter Linux entspricht. Der Compiler ist daher wahrscheinlich VC++. Das Ergebnis sollte nicht Null sein. Gib das Ergebnis in Hex aus, dann siehst Du's besser. In etwa so:

    std::cout << std::showbase;
    
    	unsigned __int64 j = 34359738368ULL;   // = 2^35
    	j = j << 1; 
    	std::cout << j << std::endl;
    	std::cout << std::hex << j << std::endl;
    	j = j << 1;
    	std::cout << std::hex << j << std::endl;
    

Anmelden zum Antworten