-         

Ergebnis 1 bis 5 von 5

Thema: Negative Zahlen grösser als Null?

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245

    Negative Zahlen grösser als Null?

    Anzeige

    Hallo zusammen.
    Ich sitze ein einem etwas längeren Programm für meinen NIBOBee.

    Im Grunde soll (weiter bin ich da gerade noch nicht) ein gewünschter Weg eingegeben werden, mittels Fühler nach vorne oder nach hinten (mehr oder weniger eben), das funktioniert auch.

    fahrstrecke ist ein uint16_t und wird beim Start mit 0 gefüttert.
    Nun kann ich mittels der Fühler diese Zahl verändern, sie wird in Zehnerschritten erhöht oder eben erniedrigt.
    Den aktuellen Wert sehe ich auch auf dem Display, es funktioniert auch, wenn fahrstrecke kleiner als 0 ist, dann werden eben negative Werte angezeigt.
    Nun aber möchte ich zusätzlich die LED`s zuschalten, als Hinweis, einfach, damit angezeigt wird: hey, das gibt ne Rückwärtsfahrt.
    Also: wenn fahrstrecke kleiner als Null wird, sollen die hinteren leuchten, wenn fahrstrecke grösser 0 ist, die vorderen.

    Code:
    if(fahrstrecke<0)								// Weg negativ, also rückwärts?
    				{
    				 led_set(LED_R_YE,1);
    				 led_set(LED_L_YE,1);
    				 led_set(LED_R_RD,0);
    				 led_set(LED_L_RD,0);
    				 }
    			if(fahrstrecke>0)								// Weg positiv, also vorwärts
    				{
    				 led_set(LED_R_RD,1);
    				 led_set(LED_L_RD,1);
    				 led_set(LED_R_YE,0);
    				 led_set(LED_L_YE,0);
    				 }
    Merkwürdiger weise aber gehen _immer_ bei Werten ungleich Null die vorderen Lichter an, die hinteren nie!
    Interpretiert der Compiler eine negative Zahl als grösser Null?
    Ich füchte, der Vergleich ist falsch notiert, wie gehts richtig?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Ein uint16_t ist eine unsigned integer Variable, zu deutsch eine vorzeichenlose Zahl. Versuche mal eine int16_t.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    Klar...
    Das wars.
    Trotzdem verwunderlich, dass der Wert auf dm Display dennoch _mit_ Vorzeichen ausgegeben wird...

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Rabenauge
    Trotzdem verwunderlich, dass der Wert auf dm Display dennoch _mit_ Vorzeichen ausgegeben wird...
    Die Eigenschaft "Vorzeichen" ist nicht in einer Variable enthalten. Man kann am Bitmuster nicht sehen, ob die Zahl ein Vorzeichen hat, diese Eigenschaft wird der Zahl erst durch die Interpretation gegeben.

    Beispiel:
    Das Bitmuster 1111111111111111 ist entweder 65535 oder -1, je nachdem ob man das Bitmuster mit oder ohne Vorzeichen interpretiert.

    Oder anders gesagt: wenn du zur Umwandlung/Ausgabe die falsche Funktion benutzt (z.B. itoa statt utoa), dann bekommt auch eine unsigned Variable ein Vorzeichen.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    Ich merke schon (neuerdings irgendwie dauernd) dass sich da noch so einige Wissenslücken auftun *seufz
    Aber erstmal wird mit dem Programm weitergemacht. Läuft gerade so schön.

Berechtigungen

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