Praktikum Programmiersprache C - Bitkette



Die Programmiersprache C bietet über ihre Bibliotheksfunktionen eine Reihe komfortabler Ausgabekonvertierungen in dezimaler, hexadezimaler oder oktaler Form. Mitunter möchte man aber eine Zahl oder Bitmaske bitweise mit ihren Nullen und Einsen darstellen.

Schreiben Sie ein C-Programm, das eine einzugebende ganze Zahl als Bitkette ausgibt. Formulieren Sie dazu eine Funktion mit folgendem Prototyp:

  char* crtBitStr(unsigned int x);
Dialog:
Eingabe einer int-Zahl:12000
***
dez: 12000
hex: 00002EE0
bin: 00000000|00000000|00101110|11100000
+++
Das Programm soll die Verarbeitungsbreite (32 bit, 64 bit) selbtstständig adaptieren und dementsprechend viele Bits ausgeben. Die  Größe des benötigten Puffers, in dem die Ausgabe zusammengestellt wird, soll selbstverständlich auch bytegenau ausgerechnet und in der Funktion crtBitStr definiert werden. Dazu verwende man den Operator sizeof!

Hilfestellung zur Lösung:
Mit einer Maske, die eine Eins enthält kann man ein Bit mit der bitweisen and-Operation (&) selektieren. Ist das Ergebnis Null, so war das Bit Null, ist das Ergebnis ungleich Null, so war das Bit Eins.
Mit Hilfe der Schiebeoperatoren
<< oder >> kann man die Zahl oder die Maske in die gewünschte Richtung verschieben. z=z<<1; verschiebt die Zahl z um ein Bit nach links, z=z>>1; Verschiebt die Zahl z um ein Bit nach rechts (z<<=1 oder z>>=1 ist auch möglich).
Erarbeiten Sie zunächst eine Lösung ohne die Trennstriche.

In c können Arrays nicht kopiert, nicht als Parameter übergeben und nicht als Returnwert zurückgegeben werden. Aber es kann statt dessen die Adresse eines Arrays übergeben/zurückgegeben werden. In der Aufgabe wird dies durch char* realisiert. Der zurückgegebene Wert kann wie das Array selbst benutzt werden. In der entsprechneden Return-Anweisung wird einfach das Array angegeben (Der Arrayname repräsentiert die Adresse des Arrays).




A. Beck