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
Knacksedit: 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 ?
-
http://www.cppreference.com/operator_precedence.html
Jepp, richtig. + kommt vor <<
-
danke mir gings aber hauptsächliche um den rechenweg den ich da zusammen gedichtet hab... ^^
