PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitweise Operatoren in SwitchTest() Funktion



Swordfish6
13.11.2012, 10:11
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):



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

markusj
13.11.2012, 10:22
In C ist die Definition wie folgend:
false = 0
true != 0

Warum das bitweise Und? Was passiert, wenn mehr als ein Taster gedrückt wird und du einen direkten Vergleich machst? Richtig, statt zweier Taster wird gar keiner erkannt.

mfG
Markus

Swordfish6
13.11.2012, 10:35
Hallo,

okay leuchtet ein da hätte ich auch selbst drauf kommen können, die Möglichkeit mit mehr Taster gleichzeitig war mir völlig entfallen ](*,)

Danke auch für den ersten Hinweis, dachte true ist gleichbedeutend mit 1.

Valen
14.11.2012, 15:31
...
Danke auch für den ersten Hinweis, dachte true ist gleichbedeutend mit 1.Bei ein 1-bit Wert stimmt dass. Aber bei ein Multi-bit Wert, ist Alles das nicht gleich 0 ist "true".