Hallo Forum,
mal wieder ein kleines Verständnisproblem bzgl. ASURO-Taster. Suche, Googeln usw. half mir leider nicht.
Der Code der Funktion (aus dem SelfTest-Programm):
Code:
void SwitchTest(void)
{
unsigned char sw,tmp;
MotorDir(FWD,BREAK);
sw = PollSwitch();
StatusLED(OFF);
FrontLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
tmp = 0;
if (sw & 0x01)
MotorSpeed(200,0);
if (sw & 0x02) {
BackLED(OFF,ON);
tmp = ON;
}
if (sw & 0x04)
BackLED(ON,tmp);
if (sw & 0x08)
FrontLED(ON);
if (sw & 0x10)
RED_LED_ON;
if (sw & 0x20)
GREEN_LED_ON;
}
Ich rätsel nun schon geraume Zeit, habe aber keine Idee warum sich der Programmierer für bitweise UNDs entschieden hat. Warum verwendet man nicht gleich den == Operator? Oder gar normale UNDs?
Ein paar Überlegungen zum bitweisen UND, den Binärzahlen und der if-Abfrage:
Wenn ich zB 0x08 und 0x08 bitweise (UND) verknüpfe müsste das Ergebnis ja (wieder) 0x08 sein. Pack ich das in eine if-Abfrage (wie oben) ist das Ergebnis true und die Anweisung wird ausgeführt. Richtig?
Verknüpfe ich zB 0x08 und 0x04 bitweise (UND) müsste das Ergebnis 0x00 sein. Pack ich das in eine if-Abfrage ist das Ergebnis false und die Anweisung wird nicht ausgeführt. Richtig?
Wenn ich nun aber 0x02 und 0x03 bitweise (UND) verknüpfe ist das Ergebnis
0000 0011
0000 0010
----------
0000 0010
Also 0x02. Spannende Frage ist nun, was passiert eigentlich wenn ich das in eine if-Abfrage packe, ist das Ergebnis true oder false?
Irgendwie steh ich auf der Leitung, bin deshalb für Tipps dankbar
Grüße
Lesezeichen