Variable mit 2 Bit?
-
Gibts sowas?
oder muss ich ein bool array nehmen?
-
Ich würde einfach ein unsigned int oder ein unsigned char. Mit was kleinerem kann die CPU ohnehin nicht rechnen (bei x86-CPU z.B. register eax, ah oder al).
Das überschüssige kannst du dann mittels bit-weisem UND "wegmaskieren".
Wenn du abermillionen von 2-bit-Werten speichern möchtest kannst du diese (ähnlich BCD (binary-coded-decimal) mittels bit-shifting in eine "native" variable (unsigned int, -short etc.) packen, dessen (mindest-)bit-Breite vom Standard vorgegeben ist.
Grüße...
Heiko
-
struct {int value :2;} only_two_bits;
-
Nur das das aufgrund des Alignments nicht wirklich 2Bit sind.

-
Braunstein schrieb:
Nur das das aufgrund des Alignments nicht wirklich 2Bit sind.

nö, aber logisch, wertebereich -1 ... 2

-
Ein bool array wuerde auch nichts bringen, da bool ein byte gross ist.
Wenn du das nur willst um Speicher su sparen, lass es lieber bleiben (ausser bei embedded systemen macht es evtl. noch Sinn).
-
Jan K. schrieb:
Ein bool array wuerde auch nichts bringen, da bool ein byte gross ist.
mindestens...
-
Bool: Größe: 1 Byte (8 Bit) WB: 0 - 1 (Dualsystem) max. Anzahl benötigter Bits: 1 -> struct {bool value : 1;} sbool;gehört jetzt zwar nicht unbedingt hierrein, allerdings...naja...war mir langweilig
-
Trotzdem belegt ein Bitfeld immer mindestens 2 Byte, d.h. ein Array von
struct { bool value : 1; } sbool[N];würde trotzdem mindestens 2*N Bytes belegen...(siehe sizeof(sbool))
-
Th schrieb:
Trotzdem belegt ein Bitfeld immer mindestens 2 Byte, d.h. ein
Wieso denn das?
-
Ähmmm, nein. Lege doch einmal eine Strukur mit 8x1Bit-Bools an, dann sizeof (strukur). Die Ausgabe wird 1 sein. Wenn du jetzt 7x1Bit-Bools rein machst, ist es immernoch ein Byte. D.h. dass 1 Byte für die Struktur angelegt wird, aber dieser trotzdem aufgeteilt wird, falls nötig.