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