Kleinster Datentyp - kann ich eine Ein-Bit-Variable definieren? [Duplikat]

8

Ich brauche nur ein Bit, um meine Daten zu repräsentieren - 1 oder 0. Was ist der beste Weg, dies in C zu tun? Die "normalen" Datentypen sind zu groß.

    
Roy 09.07.2015, 07:12
quelle

5 Antworten

10

Sie könnten

erstellen %Vor%

Wo Sie dem Compiler gesagt haben, dass Sie nur ein Bit x verwenden werden.

Aber aufgrund von Struktur-Pack-Anordnungen (der C-Standard ist absichtlich flexibel, damit Compiler sich entsprechend der Maschinenarchitektur optimieren können), kann es sich durchaus ergeben, dass dies immer noch so viel Platz im Speicher einnimmt wie ein regulärer unsigned und Ein Array von foo s muss nicht bitweise zusammenhängend sein.

    
Bathsheba 09.07.2015 07:21
quelle
5

Wenn Sie wirklich wollen, können Sie eine Struktur mit einer Mitgliedsvariablen, bit-fielded zu 1 Bit erstellen.

Denken Sie daran, dass der Datentyp der Mitgliedsvariablen unsigned sein muss, da Sie 0 und 1 speichern müssen.

    
Sourav Ghosh 09.07.2015 07:13
quelle
3

Wenn Sie nicht Millionen dieser Flags benötigen oder extrem beschränkte Speicherbeschränkungen haben, ist der beste Weg definitiv ein int .

Dies liegt daran, dass ein int normalerweise der natürlichen Wortgröße Ihrer Plattform entspricht und schnell aufeinander ausgerichtet werden kann. Die Maschine liest immer nur ein Wort nach dem anderen und die Verwendung der einzelnen Bits erfordert eine Maskierung und Verschiebung, was Zeit kostet. Auf Ihrem typischen PC mit Gigabyte RAM wäre das nur albern.

Wenn der Speicherverbrauch wirklich ein Problem ist, gibt es Bitfeldstrukturen.

    
Felix Palmen 09.07.2015 07:24
quelle
1

Der portable Weg ist die Definition einer Variablen, deren einzelne Bits als Flags verwendet werden.

%Vor%

Dies kann im Vergleich zu C-Bit-Feldern überflüssig erscheinen. Es ist zu praktisch jedem ANSI C-Compiler portierbar.

    
user5092600 09.07.2015 07:22
quelle
0

Im Allgemeinen ist der kleinste adressierbare Datenblock in C ein Byte. Sie können keinen Zeiger auf ein Bit haben, so dass Sie keine Variable mit einer Bitgröße deklarieren können. Aber wie Sourav Ghosh bereits darauf hingewiesen hat, können Sie Bitfelder deklarieren, auf die direkt auf ein Bit zugegriffen wird.

    
jwsc 09.07.2015 07:22
quelle

Tags und Links