mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Modulo nur ganze Zahlen?


Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte mit folgendem Code eine Hex  Zahl in eine  Ascii Hex bringen.
uint8_t zahl;
uint8_t zehner;
uint8_t einer;
zahl++;
zehner  = (zahl / 10) | 0x30;
einer   = (zahl % 10) | 0x30;
Das Funktioniert auch soweit ganz gut, bis auf das die einer Stelle, 
beim Hochzählen, immer nur 2,4,6 u.s.w. anzeigt. Die Zehner Stelle ist 
einwandfrei(1,2,3,4 u.s.w.). Woran liegt das?
(bitte nicht meckern, bin Anfänger)
Gruss
Olli

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo initialisierst du denn die Variable zahl?

Poste mal den entsprechenden Code vollständig.

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe vergessen es zu schreiben, dass sie mit 0 init. wird. Ist da 
Grundsätzlich was falsch, oder warum kommen nur die geraden Zahlen bei 
einer?

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da mit dem von dir geposteten Code nur eine Wandlung durchgeführt wird, 
kann der von dir beschriebene Effekt damit nicht entstehen - es wird nur 
ein Wert gewandelt und was sonst passiert, kann ich dir leider nur 
sagen, wenn du deinen Code vollständig postst.

Autor: magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olli schrieb:
> zehner  = (zahl / 10) | 0x30;
> einer   = (zahl % 10) | 0x30;

Das "|" (oder) macht hier keinen Sinn. Probier es mal mit "+".

zehner  = (zahl / 10) + 0x30;
einer   = (zahl % 10) + 0x30;

Gruß,
Magnetus

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
magnetus schrieb:

> Das "|" (oder) macht hier keinen Sinn. Probier es mal mit "+".

Irrelevant.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
magnetus schrieb:
> Das "|" (oder) macht hier keinen Sinn. Probier es mal mit "+".

Das ist schon richtig so - + und | haben hier denselben Effekt. 
Zumindest, wenn zahl < 100 ist.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wieso schreibst du 0x30? Nimm stattdessen '0', dann weiß man sofort, 
dass es um eine Umwandlung einer Ziffern in ASCII geht...

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jungs, jetzt beißt euch mal nicht an Nebensächlichkeiten fest. Es ist 
völlig gleichgültig, ob man 0x30, 060, '0' oder 48 schreibt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben.
Irgendwo im Code gibt es noch ein zweites ++ oder etwas Gleichwertiges.
Aber solange er sich wieder einmal standhaft weigert, den Code komplett 
herzuzeigen, kann man ihm den Fehler auch nicht zeigen.

PS: und ausserdem steht in der Aufgabenstellung etwas von Hex-Zahlen. 
Das wird doch nicht wieder unser krampfhafter HEX-Umrechner sein?

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Das wird doch nicht wieder unser krampfhafter HEX-Umrechner sein?

Dabei hattet ihr es ihm so erklärt, dass selbst ein Grundschüler es 
verstanden hätte...

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
modulo nur mit int !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.