Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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

Auteur Topic: Uitleg code snippet  (gelezen 877 keer)

Offline JV.com

  • Lid
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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.