Calc 4.2.4.2: DEZINBIN bei negativen Zahlen

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?

@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.

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.

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).

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

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

Karolus