Frage zu mini Code-Schnipsel

Lil-rich

Erfahrenes Mitglied
Hallo Leute,

ich hab ein kleines Problem und zwar bin ich jetz nicht so der Freak in CPP (mir liegt PHP besser xDD). Sonst versteh ich eigentlich das meiste was ich so lese, aber diese eine Zeile bereitet mir gerade Kopfzerbrechen -.-* Vielleicht ist es einfach schon zu spät... aber hier die Zeile:

Code:
uint32 current_val = (g_localTime.tm_year << 16) | g_localTime.tm_yday;

Das wird ja eine Zahl berechnet. Nur wie ? Ich komm mit den Operatoren iwie nicht klar o.o Ich versteh halt nur, dass das Jahr und der Tag mit einfließen, aber wie ist die Berechnung genau ?

Wäre sehr dankbar für Tipps !
 
Hallo,

tm_year ist ein 32 Bit Integer. Der << Operator shiftet die Bits dieser Zahl (Bsp.: 2009 in Bit: 11111011001) um 16 Bit nach Links. Die restlichen Stellen werden mit 0en aufgefüllt.
11111011001 << 16 => 111110110010000000000000000.

tm_yday ist auch ein 32 Bit Integer (Bsp.: 238 in Bit: 11101111).
Der | Operator verknüpft 2 Zahlen Bitweise als Oder-Funktion:
111110110010000000000000000 | 11101111 => 111110110010000000011101111

d.h. bei obigen Beispiel 2009 und 239 würde dann als Resultat in deiner Variablen current_val 131662063 Dezimal stehen.

Ein Anwendungsfall davon wäre bspw. um verschiedene Tage sortieren zu können.

P.S.: Siehe auch http://de.wikipedia.org/wiki/Bitweiser_Operator
Gruß,
RedWing
 
Zurück