Microsoft Excel

Herbers Excel/VBA-Archiv

Binär in Dezimal umrechnen (mit Vorzeichen)

Betrifft: Binär in Dezimal umrechnen (mit Vorzeichen) von: Sven
Geschrieben am: 24.09.2014 08:10:55

Hallo zusammen,

ich habe ein Problem mit der Umrechnung einer Binär- in eine Dezimalzahl. Ich habe eine 15Bit Binärzahl, welche ich in einer Zelle Eintrage und den DezimalWert in einer anderen Zelle ausgeben lassen.
Das mache ich mit folgender Formel:

=SUMMENPRODUKT(LINKS(RECHTS("0"&A3;SPALTE(3:3)))*2^(-1+SPALTE(3:3)))

Das funktioniert auch super. Nun würde ich gerne noch eine 16te Stelle einfügen. Diese soll das Vorzeichen darstellen, d.h. die erste (ganz linke Stelle) ist das Vorzeichen (0 für + , 1 für -).
Jetzt möchte ich eben die rechten 15 Stellen ganz normal auswerten, wie ich das mit der Formel oben schon mache und zusätzlich würde ich gerne das ganz linke Bit dann auswerten, um der Zahl entsprechend
ein positives oder negatives Vorzeichen zu geben. Allerings weiß ich da nicht weiter, wie man das anstellen kann. Vielleicht weiß da jemand weiter.

Ich hoffe, es ist nicht ganz undurchsichtig, was ich vor habe.

Beste Grüße

  

Betrifft: 15 stellige Binärzahl mit führenden Kennzeichen .. von: neopa C (paneo)
Geschrieben am: 24.09.2014 09:19:01

Hallo Sven,

... die Binärzahl muss dann aber zwingend als TEXTstring eingeben werden auch wenn 1. Zeichen eine 1 (für Negation) ist (Excel hat nur eine Genauigkeit von 15 Stellen).

Folgende schnell zusammengebastelte Formel sollte zum Ergebnis führen. Test mal.

=SUMMENPRODUKT(LINKS(RECHTS("0"&TEIL(A3;2;15);SPALTE(A3:O3)))*2^(-1+SPALTE(A3:O3)))*(1-2*(LINKS(A3;1) ))

Gruß Werner
.. , - ...


  

Betrifft: minus funktioniert so nicht von: WF
Geschrieben am: 24.09.2014 09:58:09

=1*(WENN(LINKS(A3)="0";"";"-")&SUMMENPRODUKT(LINKS(RECHTS("0"&TEIL(A3;2;99);SPALTE(A:Z))) *2^(-1+SPALTE(A:Z))))

WF


  

Betrifft: ich meine, dass dies doch so geht ... von: neopa C (paneo)
Geschrieben am: 24.09.2014 11:19:17

Hallo WF,

... und zwar für (bis zu) 16 stelligen Binärzahlen. Mit meiner Formel erhält man dafür mE die gleichen Ergebnisse wie mit Deiner Formel. Oder nicht?

Meine Formel ignoriert entsprechend der Ausgangsfragestellung bewusst alle Binärziffern nach der 16. Stelle.


Gruß Werner
.. , - ...


  

Betrifft: ich Trottel ! von: WF
Geschrieben am: 24.09.2014 14:31:13

ich hatte 0 für plus und - für minus gelesen (nicht 1 für minus)

WF


  

Betrifft: dem widerspreche ich ... von: neopa C (paneo)
Geschrieben am: 24.09.2014 17:29:11

Hallo WF,

... und das sicherlich nicht nur ich.

Du kennst mich ja und weißt, wie ich auch anderswo zu derartigen Kraftausdrücken stehe.
Ein Versehen kann doch immer und jeden mal passieren. Ein solches ist demjenigen vielleicht mehr oder weniger ärgerlich, aber mE kein Grund sich selbst gleich derartig in der Betreffzeile zu beschimpfen. Ich z.B. bin da schon viel schlimmeren Irrtümer und auch Fehlern aufgesessen. So manche meiner Tischkanten kann davon ein Lied trällern ... ;-)

Gruß Werner
.. , - ...


  

Betrifft: AW: 15 stellige Binärzahl mit führenden Kennzeichen .. von: Sven
Geschrieben am: 24.09.2014 10:01:24

Hallo,

erst einmal vielen Dank für die schnelle Antwort!
Das funktioniert wirklich gut. Ganz bin ich da zugegebenermaßen noch nicht durchgestiegen.

Ich Habe nun mal Folgendes probiert. Ich habe die Binärzahl in Zelle G1 geschrieben und die Formel oben in H1. Dann habe ich die Formel wie folgt angepasst:

=SUMMENPRODUKT(LINKS(RECHTS("0"&TEIL(G1;2;15);SPALTE(G1:U1)))*2^(-1+SPALTE(G1:U1)))*(1-2*(LINKS(G1;1) ))

Leider bringt mir dann die Formel falsche Ergbnisse. Ich erhalte dann z.B. für
1111111111111111 -32704 anstatt -32767.

Wie muss ich das denn entsprechend anpassen? Liegt es daran, dass die Quell- und Ergebniszelle in einer Zeile liegen?

Beste Grüße




  

Betrifft: AW: 15 stellige Binärzahl [...] von: Klaus M.vdT.
Geschrieben am: 24.09.2014 10:11:43

Hi Sven,
du darfst SPALTE(A3:O3) nicht ändern. Spalte A ist 1, Spalte O ist 15. Das steht für 1-15, nicht für tatsächliche Spalten.
Die Matrix geht also 15 Stellen durch, das sind die 15 Stellen deiner Zahl von links nach rechts.
Änderst du auf G1:U1, wird deine Zahl ab der 7ten bis zur 21ten Stelle errechnet. Da ab der 16ten Stelle nichts mehr kommt, fehlen dir 111111bin oder 63dez zum gesuchten Ergebnis.

Grüße,
Klaus M.vdT.


  

Betrifft: AW: 15 stellige Binärzahl [...] von: Sven
Geschrieben am: 24.09.2014 10:54:10

Hallo,

vielen Dank!
So geht es !

Danke!

Beste Grüße!


  

Betrifft: Danke für die Rückmeldung! owT. von: Klaus M.vdT.
Geschrieben am: 24.09.2014 11:51:33

.


  

Betrifft: Das fktioniert natürlich, ... von: Luc:-?
Geschrieben am: 25.09.2014 00:53:33

…Werner,
entspricht aber nicht den Xl-Konventionen, Sven,
denn bei einem vom 1.Bit abhängigen Vorzeichen gehen Xl-Fktt hier ganz anders vor, nämlich stellenzahl-abhängig. Das, was du vorhast, entspricht eher einem separaten Vorzeichen-Bit in der letzten Stelle, also ganz rechts auf der quasi 2⁰-Position, die hier aber dann eher eine „2⁻¹-Position“ wäre.
Jedenfalls würde binär 10 (LO) so -0 (rote Null!) ergeben, wenn man das Ergebnis der nachflgd Fml mit einer VBA-basierten UDF in eine echte Zahl verwandelt:
=T2Nb(WAHL(LINKS(A3)+1;"+";"-")&SUMMENPRODUKT(LINKS(RECHTS("0"&TEIL(A3;2;15);SPALTE(A3:O3))) *2^(-1+SPALTE(A3:O3))))
In Xl wdn BinärZahlenAngaben in 10er-Blöcke (in VBA sind es 8er-Blöcke!) aufgeteilt, wobei BININDEZ nur einen derartigen Block verarbeiten kann. Ob die Zahl dann negativ ist, hängt allein von der Position 2⁹ ab (Fehlen ⇒ 0). =DEZINBIN("1111111111") ergibt so -1 während Werners Fml -511 ergäbe.
Wollte man einen Kompromiss zwischen beiden Methoden schließen und mit 2er-Blöcken arbeiten, ergäbe sich aus A20:="11" mit entsprd QuersummeFkt …
=DiSum(A3;2)-(1-REST(LÄNGE(A3);2))*WENN(--LINKS(A3);2^(LÄNGE(A3)+REST(LÄNGE(A3);2));0)
…richtigerweise -1. Mit Xl-StandardFktt würde das (universell) folgender Fml entsprechen:
=SUMMENPRODUKT(TEIL(WAHL(REST(LÄNGE(A3);2)+1;"";"0")&A3;SPALTE(INDIREKT("S1:S"&LÄNGE(A3)+
REST(LÄNGE(A3);2);0));1)*2^(LÄNGE(A3)+REST(LÄNGE(A3);2)-SPALTE(INDIREKT("S1:S"&LÄNGE(A3)+
REST(LÄNGE(A3);2);0))))-(1-REST(LÄNGE(A3);2))*WENN(--LINKS(A3);2^(LÄNGE(A3)+REST(LÄNGE(A3);2));0)
1111111111 ergäbe dann ebenfalls -1, während 111111111 511 ergäbe und so dem Ergebnis von BININDEZ entspräche (weil beide eine Vornull ergänzen). Bei 8 Stellen gäbe es allerdings nur noch eine Übereinstimmung mit VBA-Methoden und ab 6 Bit-Stellen wäre die Fml vollends autochthon. Das gilt natürlich erst recht bei Längen >10, aber natürlich gestaffelt → 12, 14, 16, 18 usw.
Allerdings ist bei dieser Aufgabe natürlich entscheidend, nach welcher Methode die Binärzahl gebildet wurde. Ohne das zu wissen kann im Grunde genommen kein verbindlicher Vorschlag gemacht wdn, zumal es ja schon den Unterschied zwischen Xl-Fktt und VBA gibt!
Gruß, Luc :-?

Besser informiert mit …


 

Beiträge aus den Excel-Beispielen zum Thema "Binär in Dezimal umrechnen (mit Vorzeichen)"