-         

Ergebnis 1 bis 4 von 4

Thema: Bitweise Operatoren in SwitchTest() Funktion

  1. #1
    Neuer Benutzer Öfters hier Avatar von Swordfish6
    Registriert seit
    01.11.2012
    Ort
    Nürnberg
    Alter
    38
    Beiträge
    10

    Bitweise Operatoren in SwitchTest() Funktion

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    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
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Neuer Benutzer Öfters hier Avatar von Swordfish6
    Registriert seit
    01.11.2012
    Ort
    Nürnberg
    Alter
    38
    Beiträge
    10
    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.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Swordfish6 Beitrag anzeigen
    ...
    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".

Ähnliche Themen

  1. Bitweise und und oder
    Von Trexis5 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 01.10.2010, 16:22
  2. Bitweise UND
    Von luma im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 15.07.2007, 11:31
  3. Bitweise operationen mit dem COM-PORT
    Von mojo777 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 9
    Letzter Beitrag: 12.09.2006, 11:09
  4. Operatoren frage
    Von shamanu im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 07.02.2006, 18:42
  5. logische Operatoren
    Von recycle im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 29.03.2004, 11:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •