Programmieren in C - hexadezimal einlesen und dezimal ausgeben

3 Antworten

Wieso sind aa und bb chars? Ich glaube da könnte dein Compiler Probleme bereiten.

Versuchs mal so und guck obs funktioniert (sollte es meiner Meinung nach, hab auch nicht mehr lange C gemacht):

int aa, bb, ergebnis;
aa = 0xAA;
bb = 0xBB;
ergebnis = aa + bb;
printf("b) %i\n", ergebnis);

Wenn das funktioniert, hat dein Compiler beim Typecasten rumgespackt, deshalb immer auf Variablentypen achten.


JulesPryla 
Fragesteller
 06.11.2014, 12:05

Vielen Dank, das war die Lösung. Aber ich habe doch Characters eingelesen und daher den char gewählt. Oder gilt der Inhalt bei 0x bzw Hochkommata als Zahl bzw etwas, das ein Integer verarbeiten kann.

0
Roach5  06.11.2014, 12:07
@JulesPryla

Hexadezimalzahlen sind ja auch Zahlen. Du kannst Zahlen auf drei verschiedene Weisen schreiben: Als Dezimalzahl, als Hexadezimalzahl und als Octalzahl (base 8).

Dezimalzahlen schreibst du ganz normal, Hexadezimalzahlen haben vorne "0x" und Octalzahlen nur eine 0 (z.B. 053). Das 0x und 0 sind nur Anweisungen an den Compiler, wie er die Zahlen interpretieren soll, rechnen tut er ganz normal wie mit allen anderen Zahlen auch (sie werden ja eh als Binärzahl in den Stack geschrieben von daher ist das Eingabezahlensystem nur dazu da, es für den Leser/Schreiber des Programms ersichtlicher zu machen, was passiert). Damit bleiben sie natürlich immernoch ints.

1
possel  06.11.2014, 12:08

Der Compiler macht alles richtig, "char" ist halt üblicherweise nur 8 Bit groß und hat damit (signed) einen Wertebereich von -128 bis +127

0
Roach5  06.11.2014, 12:09
@possel

Wenn man dann bei einer Zahl, die zwischen -128 und 127 liegen soll, -157 ausgibt, muss doch wohl etwas falsch sein. Egal was der Compiler gemacht hat, korrekt mit Chars gerechnet hat er zu 100% auch nicht ;) Das ist das Problem, wenn man den falschen Datentyp nimmt und dann rumgetypecastet wird, wo es nicht getan werden sollte.

0
JulesPryla 
Fragesteller
 06.11.2014, 12:11
@Roach5

Ihr habt recht und ich danke sehr für die zahlreichen und sehr aufklärenden Worte. Es funktioniert jetzt.

0

Du hast 2x den ASCII wert von ' aufeinanderaddiert und dann davon die letzten 8 Bit genommen.

Die variablen müssen interessant sein. Anführungszeichen um die zahlen weg.

Ich habe keine Umgebung zum Testen, aber ich möchte wetten, dass du statt '0xAA' besser 0xAA schreiben müsstest.

Hier steht auch, wie du sie umrechnen kannst: http://www.c-howto.de/tutorial-einfuehrung-hexadezimalsystem.html

Tipp: Gewöhne dir google-Techniken für dein Studium an.

Woher ich das weiß:Berufserfahrung – Programmierer

JulesPryla 
Fragesteller
 06.11.2014, 12:01

Danke. Das habe ich auch gemacht und dann kommt +101 heraus. Ganz komische Nummer.

0
Suboptimierer  06.11.2014, 12:05
@JulesPryla

Das liegt am Datentyp. char kann nur 8Bit.

AA_16 + BB_16 = 1 0110 0101_2

Das sind 9 Bit. Lässt man das vordere Bit weg, kommt man auf 101_10

110 0101_2 = 101_10

So etwas kannst du super mit dem Windowstaschenrechner im Programmiermodus nachvollziehen. Du musst dir also 1*16² dazudenken.

0
JulesPryla 
Fragesteller
 06.11.2014, 12:07
@Suboptimierer

Wow und dafür braucht mein Dozent Tage um das rüber zu bringen. Vielen Dank!

1
JulesPryla 
Fragesteller
 06.11.2014, 12:03

Wie meinst du das?

0