Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
ich habe einen Geber der 9 Bit in excess 3 grey code liefert. Hat jemand eine Funktion wie ich das am besten in Dez. umrechne? meine Idee ist wohl etwas zu aufwendig...
Danke.
Die bisherigen Antworten beschränken sich (für mein Verständnis) auf die Wandlung von Gray-Code in Dual. Aber was ist denn überhaupt "9 Bit in excess 3 grey Code"? Excess-3 ist ein BCD-Code, in dem die 6 PseudoTetraden nicht - wie üblich - komplett hinter den DezimalZiffern 0 bis 9 liegen, sondern 3 davor und 3 dahinter.
Dadurch wird es zwar möglich, den GrayCode anzuwenden, ohne dass die "Einschrittigkeit" verloren geht, aber ... 9 Bit reichen für 2 Tetraden und eine viertel Tetrade - was immer das sein mag. Und diese viertel Tetrade liegt voll im Bereich der PseudoTetraden und beinhaltet somit null Information, weil sie per Definition gar nicht vorkommen darf. Gilt "excess-3" etwa nur für 8 Bit und das 9. ist "konventionell" benutzt? Damit könnte man dann die Zahlen 0 bis 199 codieren, aber es klingt irgendwie nach KuddelMuddel. Oder ist das 9. Bit ein ParityBit und es sollen die Zahlen 0 bis 99 dargestellt werden? Dies klingt wiederum nicht nach einem einschrittigen Code.
Gruss, Heinileini
PS:
Also … learning by überleging, doing and prüfing hat folgendes ergeben:
Die KuddelMuddelMischKodierung aus 1 Bit konventionell für die HunderterStelle und je zwei Tetraten Excess3Code für die Zehner und Einer drängt sich förmlich auf zur Konvertierung in GrayCode und macht durchaus Sinn, wenn man unbedingt …
- einen einschrittigen Code (= Code, bei dem sich von Schritt zu Schritt immer genau 1 Bit ändert) haben und
- die BCD-Zahlen 0 bis 199 übertragen und
- sich mit 9 Bit begnügen muss.
Die Dekodierung erfordert …
- die Konvertierung Gray in Dual und
- das Vermindern der Zehner- und EinerTetrade um jeweils 3 und (= in 1 Rutsch 33 hex oder 51 dez subtrahieren)
- die Konvertierung von BCD in Dual.
PPS:
Nachtrag für diejenigen, die sich unter BCD-Code und PseudoTetraden noch nichts vorstellen können.
BCD (binary coded decimal) besagt, dass man (wie bei der HexDarstellung) die Dual- bzw. Binär-Zahl in Grüppchen von je 4 Bit (= Tetrade) einteilt, beginnend beim niederwertigsten Bit.
Jedes ViererGrüppchen wird benutzt, um die DezimalZiffern 0 bis 9 darzustellen - in der HexDarstellung hat man zusätzlich noch die Zeichen A bis F, da jedes Grüppchen 16 mögliche BitKombinationen zulässt. Der "übliche" BCD-Code ist quasi ein HexCode, bei dem die BitKombinationen für A bis F "nicht existieren". Treten sie trotzdem auf, dann ist es eben keine zulässige BCD-Zahl - bei der Umwandlung einer solchen BitKombination von BCD in egal was für eine Darstellung erhält man "idealerweise" eine Fehlermeldung.
Was macht man mit den 6 nicht benötigten BitKombinationen? Man "verschenkt" sie unbenutzt und bezeichnet sie als PseudoTetraden, weil sie Definitions-gemäss nicht auftreten (dürfen).
Manchmal missbraucht man sie aber auch, um anstelle von Ziffern andere Zeichen in DezimalZahlen darzustellen, z.B. '+' oder '-' als Vorzeichen oder '.' oder ',' als DezimalPunkt bzw. DezimalKomma oder TrennZeichen oder 'E' für die ExponentialDarstellung - aber das ist wieder ein gaaanz anderes Thema.
Welche der 16 möglichen BitKombinationen benutzt man für die DezimalZiffern 0 bis 9 und welche werden zu PseudoTetraden degradiert?
Die geradeaus denkenden Menschen entscheiden spontan: die Kombinationen, die "sowieso" schon den Zahlen 0 bis 9 entsprechen, bleiben so und die Kombinationen, die in der HexDarstellung durch die Buchstaben 'A' bis 'F' repräsentiert werden, seien die PseudoTetraden.
Die üblichen KonvertierBefehle bzw. KonvertierFunktionen, die von dual bzw. dezimal in BCD (= binary coded decimal) umwandeln bzw. umgekehrt von BCD in dual bzw. dezimal, gehen von genau diesem naheliegenden Verständnis aus. Vorteil: in der HexDarstellung sind die BCD-Zahlen bestens zu lesen.
Es gab/gibt aber auch Gründe, von diesem naheliegenden Verständnis abweichende Definitionen zu ersinnen.
Einer dieser Gründe ist die Verwendung von einschrittigen Codes, z.B. dem GRAY-Code, bei dem sich von einer BitKombination zur nächsten jeweils nur 1 Bit ändert.
Was gut funktioniert, wenn man alle 16 BitKombinationen zulässt, das funktioniert bei der eben genannten Definition des BCD-Code jedoch nicht mehr, weil auf 9 nicht mehr A und auf F nicht mehr 0 folgt (A bis F gibt es ja nicht in diesem BCD-Code), sondern es folgt 0 direkt auf 9 und dabei ändern sich gleich 2 Bits.
Also ist man u.a. auf die scheinbar absurde Idee gekommen, 0 bis 2 und D bis F zu den PseudoTetraden zu erklären und die HexZahlen 3 bis C als Kodierung für die DezimalZiffern 0 bis 9 zu verwenden. Denn wenn man nun diese Kodierung in GRAY-Code umwandelt, ist die einschrittige Welt wieder in Ordnung. Der hier beschriebene BCD-Code nennt sich Excess3-Code.
Der Excess-3-Code ist eine Möglichkeit von diversen, BCD-Zahlen zu definieren, es ist aber ausdrücklich NICHT DIE Variante, an die man spontan beim Begriff BCD-Code denkt!
Folgende Nachteile haben alle BCD-Kodierungen gemeinsam:
- die Einteilung in VierBitGrüppchen für jede DezimalZiffer bringt mit sich, dass etliche BitKombinationen nicht zulässig sind und somit die Nutzung des Speichers nicht "effektiv" ist und
- die ProgrammierSprachen stellen ("normalerweise" - Ausnahme COBOL?) keine Befehle für das Rechnen mit BCD-Zahlen bereit.