Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Uitleg code snippet  (gelezen 1027 keer)

Offline JV.com

  • Lid
Uitleg code snippet
« Gepost op: 2010/01/20, 13:20:57 »
Hallo Iedereen,

Ik heb een vraagje: wi kan mij vertellen wat het volgende code snippet doet?

    a = cmd & MISSILE_LAUNCHER_CMD_LEFT ? 1 : 0;
    b = cmd & MISSILE_LAUNCHER_CMD_RIGHT ? 1 : 0;
    c = cmd & MISSILE_LAUNCHER_CMD_UP ? 1 : 0;
    d = cmd & MISSILE_LAUNCHER_CMD_DOWN ? 1 : 0;
    e = cmd & MISSILE_LAUNCHER_CMD_FIRE ? 1 : 0;

ik denk dat dit een soort if statement is alleen snap ik dan nog niet wat het doet.

Alvast bedankt,

JV.com

Offline idefix

  • Lid
Re: Uitleg code snippet
« Reactie #1 Gepost op: 2010/01/20, 13:35:09 »
Hallo JV,

Ik ga ervan dat het in C is. Het is de ternaire operator die inderdaad als een if fungeert:


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;

De algemene vorm is dus zo:

variabele = (voorwaarde)? waarde indien aan de voorwaarde voldaan is : waarde indien niet aan de voorwaarde voldaan is;

Wat betreft de waarde van (cmd & MISSILE_LAUNCHER_CMD_LEFT): deze is waar (true) als ze ongelijk is aan 0; als ze gelijk is aan 0 heeft deze uitdrukking de waarde onwaar (false)
Support bacteria. They're the only culture some people have.

Offline Javabean

  • Lid
Re: Uitleg code snippet
« Reactie #2 Gepost op: 2010/01/22, 14:20:58 »
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.

Offline idefix

  • Lid
Re: Uitleg code snippet
« Reactie #3 Gepost op: 2010/01/22, 16:10:00 »
Dank je wel, Java Bean, je hebt gelijk. De haakjes zijn nodig.
Support bacteria. They're the only culture some people have.