|
Home - Programmieren - C++ - Binäre Darstellung in C/C++
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Das Problem Möglicherweise haben Sie sich schon einmal gefragt, wie es möglich ist, eine dezimale Zahl z.B. vom Typ unsigned int binär darzustellen. Dies kann man auf mehrere Arten erreichen. Ich möchte hier eine Art vorstellen, die sich einer sogenannten "negativen" Eigenschaft eines C/C++ Sprachkonstruktes bedient. Unions Eine Union, die ja sicherlich jedem C/C++-Programmierer bekannt ist, hat die "negative" Eigenschaft, dass jede Eigenschaft der Union in ein und demselben Speicherbereich liegt und die Größe des Speicherbereiches sich nach der größten verwendeten Eigenschaft richtet. Setzt man die Union in anderen Lösungen ein, kann sich das als negativ auswirken, doch für dieses Vorhaben erweist sich diese Eigenschaft als sehr positiv. Das Bitfeld Ein Bitfeld ist eine normale Struktur, die aber Variablen mit unterschiedlicher Bit-Größe beinhalten kann. Solch eine Variable wird folgendermaßen deklariert:
Diese Deklaration bedeutet, dass eine Variable mit einer Größe von 3-Bit angelegt wird,
welche somit Zahlen von 0-7 aufnehmen kann. Interessant dabei
ist nun, dass in solch einem Bitfeld ausschließlich Variablen dieses Typs vorkommen.
Für unser Beispiel mit einer 8-Bit Variablen sieht das Ganze so aus.
Man könnte nun solch ein Bitfeld auch für Flags benutzen, da wirklich pro
Variable nur ein Bit reserviert ist und nicht wie beim Datentyp BOOL, je nach
Compiler 1-4 Byte reserviert werden. Somit ist diese Art, Flags zu setzen,
ressourcenschonend.Binäre Darstellung Das Bitfeld kann beliebig erweitert werden, um z.B. auch Variablen mit 32 oder 64 Bit darzustellen, doch für dieses Beispiel reicht ein Bitfeld für eine 8-Bit Variable aus. Nun muss dieses Bitfeld zusammen mit einer 8-Bit Variable in eine Union gepackt werden. Das sieht folgendermaßen aus:
Eine Deklaration einer Variablen dieses neuen Konstrukts sieht wie folgt aus:
Über den Namen binaerdarstellung könnte nun die Variable value initialisiert
werden. Und genau jetzt macht sich der vermeintliche Nachteil einer Union bemerkbar.
Ist ein Wert in der Variablen value gespeichert, somit liegt er auf dem
selben Speicherbereich wie unser Bitfeld und kann nun binär ausgelesen werden.
Hier initialisieren wir die Variable value mit dem Wert 127, lesen dann das 3te Bit
aus, also das Bit an vierter Stelle des Bitfeldes. Dessen Wert müsste nun 1
betragen. Nun könnten Sie den Wert des Bits z.B. auf 0 ändern, wodurch sich
ebenfalls der Wert der Variablen value auf 119 ändert. Um einen Wert komplett
binär darzustellen, können Sie alle Variablen des Bitfeldes ausgeben lassen, zu
beachten ist dabei aber, dass Sie mit dem höchstwertigem Bit anfangen, hier bit07
und beim Bit mit dem niedrigsten Wert aufhören, hier bit00. Mit der Funktion printf()
sieht dies wie folgt aus:
Ich hoffe, ich konnte eine Anregung geben, wie man Variablen binär darstellen kann.
|
Autoren:04150
Artikel:00819 Glossar:04124 News:13569 Userbeiträge:16268 Queueeinträge:05150
Projektsteuerung statt Anwesenheitskontrolle
MONDroid - your monitoring Solution for Android with PRTG-Support Red-Hosting jetzt mit erweitertem Shop-Webhosting-Angebot [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|