Frage zur shift Operation



  • Hi,

    ich habe folgenden Quelltext von einem Freund bekommen.
    Er meinte es kleines "Puzzle"

    #include <iostream>
    
    void printHex(__int32 num)
    {	
    	printf("%X\n", num);
    }
    
    int main()
    {                       
    	printHex(0xBAAD<<16 + 0xFEED);
    
    	std::cin.get();
    	return 0;
    }
    

    Erwartete Ausgabe: BAADFEED
    Mein Gnu Compiler sagt mir, dass 0 raus kommt.

    Ich bin im Moment an dem Punkt, dass ich weiss das zuerst die Addition stattfindet und dann geshiftet wird.
    also das 0xBAAD um 0xFF03 Stellen nach links geshiftet wird.
    Und ich habe nun die Vermutung, dass das Ergebniss zu gross ist (BAAD gefolgt von ca. 19k Nullen) und das deshalb 0 ausgegeben wird.

    Liege ich mit der Vermutung richtig oder war das n Schuss ins Blaue ?

    mfg
    Knacks

    edit: auf BAAD gefolgt von 19k Nullen komme ich durch folgende Rechnung:
    Um 1 nach links shiften ist wie die Multiplikation mit 2 also 1<<1 == 1*2
    und dann wäre das BAAD * 2^FF03 also in Hex ausgedrückt
    oder als dezimal: 47789 * 2^65283 = 6,6150765548744654333044097453222e+19656
    so sagt der win Taschenrechner das.
    Is dieser Rechengang richtig oder ist das auch ein Irrtum ?





  • danke mir gings aber hauptsächliche um den rechenweg den ich da zusammen gedichtet hab... ^^ 😉


Anmelden zum Antworten