a = cmd & MISSILE_LAUNCHER_CMD_LEFT ? 1 : 0;
Je moet dit zo lezen:
Geef aan a de waarde 1 als (cmd & MISSILE_LAUNCHER_CMD_LEFT) waar is. Anders geef je aan a de waarde 0;
Het lijkt mij dat de terniaire operator een hogere prioriteit heeft dan de bitsgewijze AND operator. Het statement is dan gelijk aan:
a = cmd & (MISSILE_LAUNCHER_CMD_LEFT ? 1 : 0)
Het gedeelte tussen haakjes krijgt waarde 1 als MISSILE_LAUNCHER_CMD_LEFT waar is en anders 0. De resterende expressie cmd & b (waarbij b dan 0 of 1 is) is een zgn. AND-masker dat alle bits behalve het laatste op 0 zet en het laatste bit 0 danwel 1 wordt (of blijft).
Een statement met ?: operator in de vorm
a = x ? y : z
is overigens gewoon gelijk aan:
if (x)
a=y;
else
a=z;
het is alleen wat korter.