https://de.wikipedia.org/wiki/Bitwei...Verschiebungen
1 << 0 heißt: Nimm die Zahl eins und verschiebe die bits nicht
1 << 1 heißt: Nimm die Zahl eins und verschiebe alle bits um eine Position nach links
1 << 2 heißt: Nimm die Zahl eins und verschiebe alle bits um zwei Positionen nach links
Eine Verschiebung der bits nach links um eins entspricht einer Verdopplung/Multiplikation mit 2.
>> und << sind sogenannte Bitshift-Operatoren und gehören zu den Bitoperatoren, d.h. sie verändern die binäre Darstellung eines Wertes. << ist "bitshift-left" (auch "logical shift left"), d.h. bei a << 3 werden alle Bits von a um 3 Stellen nach links geschoben. Von rechts wird dabei mit Nullen aufgefüllt. Hier mal ein paar Beispielwerte:
Man sieht hier auch, dass a << b == a * 2b, aber es gibt natürlich keinen Potenz-Operator in Daedalus. (a wird allerdings immer als vorzeichenlose Zahl betrachtet - also am besten einfach auf die binäre Darstellung achten, die ist eindeutig in Bezug auf die Bit-Operatoren).
Diese Operatoren sind vor allem für Bitfelder nützlich. Durch die Konstanten wird abgesteckt, welche Bits einer Zahl für welchen Einzelwert zuständig sind, damit kann man viele kleine Werte parallel in einer einzigen Zahl speichern. Zum Beispiel könnte man die beiden Konstanten kombinieren:
Code:
npc.flags = NPC_FLAG_FRIEND | NPC_FLAG_IMMORTAL; // Bitfeld-Konstanten kombiniert man mit |
Dann wäre der NPC sowohl ein Freund als auch unsterblich.
Ob das Bitfeld einen bestimmten Wert speichert, prüft man dann so:
Code:
if ((npc.flags & NPC_FLAG_IMMORTAL) == NPC_FLAG_IMMORTAL) {};