PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Negative Zahlen grösser als Null?



Rabenauge
04.04.2010, 17:28
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.


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?

radbruch
04.04.2010, 17:56
Hallo

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

Gruß

mic

Rabenauge
04.04.2010, 19:05
](*,) Klar...
Das wars.
Trotzdem verwunderlich, dass der Wert auf dm Display dennoch _mit_ Vorzeichen ausgegeben wird...

sternst
04.04.2010, 19:24
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.

Rabenauge
04.04.2010, 20:36
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.