4 Bit Wert in 3 1/2 Bit umrechnen?

Gast #172776
Lesenswert?

Möchte Werte im Bereich von 0-15 auf einen Bereich von 0-11 umrechnen.
Für die größeren Zahlen klappt es einigermaßen, von links gesehen die
erste Null zu behalten und die restlichen Stellen nach rechts zu
schieben.

Kennt jemand die "saubere" Lösung, mit der sich auch kleinere Werte
ordentlich runden lassen?
Gast #172780
Lesenswert?

na ja, sind es denn 12/16, (da die 0 ja auch mit darstellbar ist)?

also dann auch 3/4

/4 ist mit shift realisierbar, und *3 durch 3fache Addition

Du must also zuerst 3 mal addieren (also passende Registergröße
vorhalten, müssten ja dann 10 bit sein) und das ergebniss dann schieben
Gast #172781
Lesenswert?

AUtsch, wo ich den Zahlenwert in 8 Bit breitkloppen möchte weiß ich auch
grad nicht.

"zur Not" tuns auch 4 Bit (respp. 6 Bit)

also

15d * 3d = 45d (binär = 101101
das dann durch 4 = 2 * shift rechts = 1011 = 11d
Gast #172783
Lesenswert?

0  0,00  0
1  0,75  1
2  1,50  2
3  2,25  2
4  3,00  3
5  3,75  4
6  4,50  5
7  5,25  5
8  6,00  6
9  6,75  7
10  7,50  8
11  8,25  8
12  9,00  9
13  9,75  10
14  10,50  11
15  11,25  11

Ein bishcen ungenau wird es also immer
Gast #172785
Lesenswert?

Eben bin ich mit der Bahn nach Hause gefahren und dachte nur: Autsch,
was für ne bekloppte Frage. Wert kopieren, zweimal schieben, Ergebnis
vom Ursprungswert subtrahieren und fertig.

Danke für die vielen schnellen Antworten. Peter, Du hättest bestimmt
noch irgendwo nen Zyklus gespart doch für mich ist die Performance
vorerst ausreichend und ich kenne mich mit dem 8051ger nicht aus...
(die neue Schule, erst mit´m AVR angefangen ;)

THX

(und nächstes mal versuche ich erstmal nachzudenken bevor ich dumme
Fragen stelle ;)

Basti aka "Alisa 1387"
Gast #172787
Lesenswert?

Das ist ja alles viel zu umständlich. So ganz habe ich nicht verstanden,
wozu ich 10 Bit brauche, um einen 4bit Wert nach 3 1/2 umzurechnen.

Die "garantiert kürzere" Tabelle ist mir zu lang.

Und das Runden ist egal, da gar keine Nachkommastellen benötigt werden
(waren die 10 Bit für Nachkommastellen gedacht?)
#172790
Lesenswert?

"Peter, Du hättest bestimmt
noch irgendwo nen Zyklus gespart doch für mich ist die Performance
vorerst ausreichend und ich kenne mich mit dem 8051ger nicht aus..."


Die ATMegas können doch auch multiplizieren:

ldi r16, 15 ;r16 = 15
ldi r17, 188
mul r16, r17
mov r16, r1 ;r16 = 11


Peter
Gast #172793
Lesenswert?

> da man keine halben Bits nutzen kann *g*

Doch, es gibt nutzbare halbe bits (auch außerhalb von Gaststätten um
Bitburg)

Beid er seriellen Übertragung kann man dei Anzahl der Stop-bits auf 1,5
oder ,5 stellen. Dies hat durchaus sinnvolle Gründe.
#172795
Lesenswert?

@Martin,

"wieso eine integer-Multiplikation effizienter sein soll"

LDI + MUL = 2 Words / 3 Zyklen
2 * ADD + 2 * LSR = 4 Words / 4 Zyklen

Die Effizienz ist aber nicht ausschlaggebend, sondern daß die
Multiplikation auch für beliebig andere Umrechnungen geeignet ist.
Z.B. um ADC-Werte in reale Spannungen umzurechnen und umgekehrt.

Wichtig ist dabei nur, daß man den Koeffizienten so wählt, daß eine
Division durch 256 oder 65536 oder andere Zweierpotenzen herauskommt.



Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren