Nieuws:

Ubuntu-NL weer online!

Na een periode van technische problemen en een overbelaste server zijn we eindelijk weer bereikbaar.
Samen met Hobbynet, onze sponsor en hostingpartner, hebben we een oplossing gevonden zodat alles weer soepel draait.

Bedankt voor jullie geduld en begrip. We hopen nu weer verder te gaan waar we gebleven waren.

Het team van Ubuntu-NL

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

Auteur Topic: Uitleg code snippet  (gelezen 1400 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.