Hexadezimalzahl in Dezimalzahl

Hallo,
ich sitze an der Prüfungsvorbereitung und habe bei folgender Aufgabe ein Problem.
Gegeben sind die Hexadezimalzahlen 0104 und FEFC als 16Bit Hex-Zahl.
Diese sollen in die Dezimalschreibeweise umgewandelt werden (Frage: Welchen Amplitudenstufen entsprechen diese Samples?). Im Grunde bereitet mir das keine Probleme, so weiß ich dass 0104(hex) der Zahl 260(dez) entspricht. Rechne ich FEFC(hex) um, so komme ich auf den Wert 65276(dez). Genau so der Windows-Rechner.
In den Unterlagen ist jedoch der Wert -260(dez) für FEFC(hex) angegeben. Ein Bekannter hat versucht es mir so zu erklären: Wenn die Hex-Zahl mit einem Buchstaben anfängt muss man FFFF(hex) nehmen und die gegebene Zahl davon subtrahieren. In diesem Falle käme dann 0104 also 260 heraus. Jetzt „setzt man einfach ein Minus davor“ und man hat das Ergebnis. Dieser Begründung kann ich nicht folgen, vielmehr Frage ich mich, ob es überhaupt negative Dezimalzahlen gibt, die sich in hexadezimaler Schreibweise darstellen lassen.
Über Hilfe wäre ich dankbar :smile:

Hallo Christian,

es gibt grundsätzlich 2 Möglichkeiten, Hex-Zahlen zu interpretieren:

  1. so wie du es beschrieben hast, 1 Byte ist 0…FF = 0…255 (in C „unsigned“).

  2. mit Vorzeichen als Komplementärzahl, das MSB kennzeichnet eine negative Zahl. 0…7F ist 0…127 wie zuvor, 80…FF ist dagegen von der nächstgrösseren Einheit abzuziehen und minus zu setzen, also FF = 100-FF = -1, FE = 100-FE = -2 usw. , 80…FF ist also -128…-1. In C heisst das „signed“. Die Erklärung deines Bekannten liegt leicht daneben.

Hintergrund: Zähler funktionieren so. Zählt ein 8bit-Zähler abwärts, so kommt nach 00 eben FF und das kann man als Unterlauf zu 255 sehen oder eben als -1. Mit den Komplemetärzahlen lässt sich auch besser rechnen, bei Interpretation als vorzeichenlos gibt es eben keine negativen Zahlen.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Christian,

Ja es gibt schon negative Hex-Werte, aber normalerweise
braucht man dann noch ein Vorzeichen bit. Du solltest dich mit
der Komplement-Bildung beschäftigen…

Also die erste Zahl ist ja F also 1111 dann weisst ja das
erste Zeichen ist Vorzeichen. Also kannst mit 0111 (also im
positiven Bereich) maximal ne 7 Anzeigen => der größte Wert
im positiven Bereich ist also 7 FFF was 32767 entspricht
und der kleinste sollte 8000[hex] sein also -32767.

Es gibt dann aber die Null doppelt.

http://de.wikipedia.org/wiki/Einerkomplement

grüße
Matze

Danke für die rasche Antwort :smile:
So ergibt das Ganze schon mehr Sinn :wink:
Gruß Christian

Hallo und danke für die Antwort :smile:
Verstehe ich es richtig, dass es also auf die Intepretation ankommt? Mit anderen Worten: Für die Klausur wären beide Ergebnisse als richtig zu bewerten? Oder gilt in diesem Fall die Frage nach der Amplitudenstufe einen Hinweis darauf, dass wenn der eine Wert 260 ist, der andere -260 sein muss? Denn wenn ich 16 Bit habe (und somit 65536 Zustände) kann es ja bei einem Zustand von 65276 keinen Wert von -65276 geben weil die Codierung nicht dafür ausreicht. Und eine Amplitude schwingt ja immer in beide Richtungen der x-Achse, richtig?
Vielen Dank!
Gruß Christian

Hallo,

Verstehe ich es richtig, dass es also auf die Intepretation
ankommt?

Ja, so ist es bzw.
nur die Interpretation, die der vorgeg. Definition entspricht ist
richtig.

Bei der Definition von Zahlentypen in verschiedene Programmier-
sprachen ist es z.B. so, daß eine Zahl mit 2 Bytes
einmal als Typ „Word“ deklariert werden kann
-> nur positive Zahlen von 0 … 65535

oder man definiert den Typ „Integer“
-> -32767 … 0 … +32768

Mit anderen Worten: Für die Klausur wären beide
Ergebnisse als richtig zu bewerten? Oder gilt in diesem Fall
die Frage nach der Amplitudenstufe einen Hinweis darauf, dass
wenn der eine Wert 260 ist, der andere -260 sein muss? Denn
wenn ich 16 Bit habe (und somit 65536 Zustände) kann es ja bei
einem Zustand von 65276 keinen Wert von -65276 geben weil die
Codierung nicht dafür ausreicht. Und eine Amplitude schwingt
ja immer in beide Richtungen der x-Achse, richtig?

In solchen Fällen, wo es um eine symetrische Aussteurung geht
z.B. bei einem Analog-Digital-Wandler (ADC)wird dann eher
mit einem Zahlenbereich vn -xxxx … 0 … +xxxx gerechnet.

Bei einem 12Bit-ADC mit 4096 Digitalisierungsstufen also z.B.
von -2047 … 0 …+2048
Gruß Uwi

Hallo Christian !

Wie gesagt handelt es sich bei der Hex-Zahl um eine negative Zahl.
Dazu wird in der Informatik im allgemeinen das sogenannte Zweierkomplement verwendet, da man beim Rechnen mit Zahlen im Zweierkomplement nicht beachten muss ob die Zahl negativ oder positiv ist, das Ergebnis ist immer die korrekte Zahl wieder in Zweierkomplementdarstellung.
Genaueres siehe
http://de.wikipedia.org/wiki/Zweierkomplement

mfg
Christof

Danke für die Klärung :smile:
Ist ein ziemlicher Aufwand für einen mickrigen Punkt :wink:
Gruß Christian

Hallo und danke für die Antwort :smile:
Verstehe ich es richtig, dass es also auf die Intepretation
ankommt?

Das ist vollkommen richtig. Ohne weitere Angaben in der Aufgabe würde ich allerdings ebenfalls von vorzeichenloser Darstellung ausgehen. Es gäbe nämlich noch ein paar weitere Interpretationsmöglichkeiten der Werte.

Ich wollte nur erwähnen, dass z.B. eine CPU auch nicht im Vorraus weiss, welche Darstellung – mit oder ohne Vorzeichen – gerade genutzt wird. Daher wird stets mit beiden Varianten gerechnet und entsprechend bestimmte Flaggen (Overflow, Vorzeichen, etc.) gesetzt. Es ist dann Aufgabe des Programmierers, die richtigen Flaggen auszulesen, je nach Anwendungsfall. Das ist das schöne an der Zweierkomplement-Darstellung, man braucht keinen Unterschied zwischen Subtraktion und Addition mit vorzeichenlosen Zahlen zu machen.

Gruß

Fritze

Rückfrage
Hallo,

7 FFF was 32767 entspricht
und der kleinste sollte 8000[hex] sein also -32767.
Es gibt dann aber die Null doppelt.

welches ist die zweite Null neben $0000?
Gruß
Axel