Probleme beim rechnen mit dem Vorzeichen

Gast #98926
Lesenswert?
• ▲
▼
Hallo ich will eine Variable (unsigned char zeitH) die größer ist als
127 am LCD Display ausgeben. Ich verwende dafür folgenden Code:

hundert=zeitH/100;
zehn=(zeitH-hundert*100)/10;
einser=(zeitH-hundert*100-zehn*10);

Dazu wird immer 48 addiert für ascii.
Wenn die Zahl kleiner als 127 ist, dann ist es kein Problem
Ist Sie größer werden z.B für 128 /.( ausgegeben.
=> vermutlich ein Problem mit dem Vorzeichen.

Wie kann ich das einfach umgehen?
Gast #98927
Lesenswert?
• ▲
▼
Hallo,

könnte man das ganze nicht auch mit Subtraktionen machen? So z.B.:

1. Solange 100 abziehen, wie zeitH >= 100 und hundert inkrementieren
2. Solange 10 abziehen, wie zeitH >= 10 und zehn inkrementieren
3. einser = Rest

Das ganze ist denke ich auch schneller als die Lösung mit Divisionen
und Multiplikationen. Aber vielleicht gibt es auch noch elegantere
Lösungen.

Viele Grüße,

Ralf


www.ralf-hochhausen.de
Gast #98930
Lesenswert?
• ▲
▼
divisionen sind zumindest bei x86 richtige zeitfresser, modulos um ein
vielfaches mehr. wie das aber beim avr ist weiss ich nicht... ich
persönlich favorisiere ralf's lösung.
vorzeichen: teste das MSb und bilde das 2erkomplement falls MSb
gesetzt.
also:
hunderter=zehner=0;

if( zeitH > 127 ) {
    //male hier das '-'Zeichen
    zeitH ^= 0xFF;   //zweierkomplement
    zeitH++;         //weil 0 hier -1 bedeutet
}
while( zeitH >= 100 ) zeitH -= (++hunderter)*100;
while( zeitH >= 10) zeitH -= (++zehner)*10;
einser=zeitH;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.