Frage stellen
0

Calc 4.2.4.2: DEZINBIN bei negativen Zahlen

gefragt 2014-07-05 16:56:11 +0200

Denis81 Gravatar-Bild

updated 2014-07-05 19:03:37 +0200

Bei den Makros gibt es das Add-In DEZINBIN(Zahl, Stellen), welches eine Dezimalzahl in eine Binärzahl mit einer angegebenen Anzahl Stellen umwandelt. Bei Eingabe einer negativen Zahl wird das Zweierkomplement leider immer mit 10 Stellen gebildet. Hier wäre es schön, wenn die Anzahl der Stellen ebenfalls berücksichtigt wird. Algorithmisch dürfte das doch nicht allzu schwer sein, oder?

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

@Denis81: Wolltest du tatsächlich ein Zweierkomplement als Ergebnis oder ein Ergebnis, das aus Vorzeichen und Betrag beteht?.Ich habe in meiner Antwort unterstellt, die Darstellung negativer Zahlen als Zweierkomplement wäre gewünscht. Zur weiteren Verdeutlichung füge ich meine Beispieldatei der ursprünchen Antwort bei. Ich habe sie mit einer modifizierten Form des Vorschlags von Karolus ergänzt.

Lupp Gravatar-BildLupp ( 2014-08-24 14:11:56 +0200 )Bearbeiten

2 Antworten

0

geantwortet 2014-08-23 17:47:06 +0200

karolus Gravatar-Bild

updated 2014-08-23 17:47:53 +0200

Späte Antwort aber wie wäre es mit bsplw.

=WAHL(VORZEICHEN(A1)+2;"-";"";"")&DEZINBIN(ABS(A1))

Karolus

Bearbeiten Melden löschen Link mehr
0

geantwortet 2014-07-05 19:48:03 +0200

Lupp Gravatar-Bild

updated 2014-08-24 14:39:04 +0200

Das Tückische ist die Umkehrung. Bin2DEC() sieht keinen Parameter für die Bitlänge der dyadischen Zahl vor, sondern unterstellt immer die Länge 10 (Bits).

WENN die Dezimalzahl im zulässigen Bereich für die Bitbreite n liegt [- (2^(n-1)) .. + 2^(n-1)-1], DANN kannst du vom Ergebnis, das DEC2BIN({Zahl};n) im Fall {Zahl}<0 MIT 10 BIT BREITE liefert, einfach die rechten n Schreibstellen (Zeichen) nehmen: RIGHT(DEC2BIN({Zahl};n);n). Die Formel sollte vielleicht um eine Bereichsprüfung ergänzt werden.

Bei der Rundreise hast du aber das oben genannte Problem. Du musst deshalb den passenden Umgang mit dem Zweierkomplement SELBST in die Formeln einbauen. Falls du auch die positiven Zahlen mit voller Bitbreite dargestellt hast, geht das z.B. mit Hilfe der Textmanipulationen:

=IF(LEFT(D1;1)="1";-BIN2DEC(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D1;"1";"H");"0";"1");"H";"0"))-1;BIN2DEC(D1))

wobei die dyadische Zahl (falls negativ IM ZWEIERKOMPLEMENT!) der gewählten FESTBREITE in D1 steht. Nochmals Achtung : MSB=1 MUSS "NEGATIV" bedeuten! Falls du führende Nullen weglässt (Sollte man bei dyadischen Zahlen nie tun!) gibt's Mist!

Hinzufügung per Editierung am 2014-08-24: ask36505BIN2DEC_BitWidthGiven001.ods

Die Variabilität der Stellenzahl wäre natürlich für jemanden, der diese Funktionen implementiert und der ja die zugrundeliegende Mathematik kennt, kein Problem- Es müssten halt die Umkehrfunktionen ebenfalls mit dem entsprechenden Parameter ausgestattet werden. Wer da (aus welchen Gründen??) entschieden hat, das bei DEC2BIN zu tun, aber bei BIN2DEC nicht, ist mir freilich ein Rätsel (übrigens auch, warum ase Ergebnis bei DEC2BIN in nichtdezimalen Darstellungen aud 10 Schreibstellen begrenzt sind). Die obligatorische Darstellung der dyadischen Zahlen mit der zutreffenden Anzahl von führenden Nullen wäre auch eine Möglichkeit. Da müsste man freilich befürchten, dass Anwender aus Unkenntnis durch "Abkürzung" Funktionsfehler verursachen.

Bearbeiten Melden löschen Link mehr

Kommentare

Okay, nur die rechten Stellen zu nehmen ist zwar etwas umständlich, aber ein Workaround, der für mich passt. Trotzdem irgendwie schade, dass eine variable Anzahl Stellen nur deswegen nicht implementiert wird, damit die Umkehrfunktion noch funktioniert (die ich z. B. nicht verwende).

Denis81 Gravatar-BildDenis81 ( 2014-07-07 00:19:32 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2014-07-05 16:56:11 +0200

Angesehen: 430 Mal

Aktualisiert: Aug 24 '14