Detaillierte Einführung in die Bitsegmente der C-Sprache
Bitsegment in C-Sprache
Das Bitfeld definiert den von Mitgliedsvariablen in einer Struktur (oder Union) belegten Platz in Biteinheiten. Eine Struktur (Vereinigung), die Bitsegmente enthält, wird als Bitsegmentstruktur bezeichnet. Die segmentierte Struktur kann Platz sparen und die Bedienung erleichtern.
Das Definitionsformat des Bitfelds ist:
Typ [var]: Ziffern
wobei Typ nur int, unsigned int, signiert sein kann Es gibt drei Arten von int (ob der int-Typ negative Zahlen darstellen kann, hängt vom Compiler ab. Beispielsweise ist int in VC standardmäßig vorzeichenbehaftet int, kann negative Zahlen darstellen). Der Bitfeldname var ist ein optionaler Parameter und kann weggelassen werden. Digits stellt die Anzahl der von diesem Bitfeld belegten Binärziffern dar.
Dann kann die Definition einer Bitsegmentstruktur wie im folgenden Code definiert werden:
struct node { unsigned int a:4; //位段a,占4位 unsigned int :0; //无名位段,占0位 unsigned int b:4; //位段b,占4位 int c:32; //位段c,占32位 int :6; //无名位段,占6位 };
1. Verwendung von Bitsegmenten
Bei der Verwendung sind einige Punkte zu beachten Bitsegmente:
1) Der Typ des Bitfelds kann nur int, vorzeichenlos int, vorzeichenbehaftet int sein und darf nicht vom Typ char oder Fließkomma sein.
2) Die von belegten Binärziffern das Bitfeld Die Zahl darf die maximale Anzahl von Ziffern, die durch den Basistyp dargestellt werden können, nicht überschreiten. In VC belegt int beispielsweise höchstens 32 Bits.
3) Auf unbenannte Bitsegmente kann nicht zugegriffen werden, sie belegen jedoch Platz. 4) Die Adressoperation kann nicht für das Bitfeld ausgeführt werden 5) Wenn die Anzahl der von einem Bitfeld belegten Binärstellen 0 beträgt, muss dieses Bitfeld ein unbenanntes Bitfeld sein und das nächste Bitfeld wird in der nächsten Bitfeld-Speichereinheit gespeichert (hier die Anzahl der Bitfeld-Speichereinheiten). wurde in der VC-Umgebung auf 4 getestet) Bytes) werden gespeichert
6) Wenn das Bitfeld im Ausdruck erscheint, wird es automatisch auf den Typ „Integer“ aktualisiert und in den Typ „int“ oder „unsigned“ konvertiert int.
7) Wenn Sie einem Bitsegment einen Wert zuweisen, ist es am besten, den maximalen Bereich, den das Bitsegment darstellen kann, nicht zu überschreiten, da sonst unerwartete Ergebnisse auftreten können.
8) Das Bitfeld darf nicht die Form eines Arrays haben.
2. Wie Bitsegmentstrukturen im Speicher gespeichert werden
Für Bitsegmentstrukturen optimiert der Compiler automatisch den Speicherplatz:
1) Wenn eine Bitsegment-Speichereinheit alle Mitglieder in der unteren Bitsegmentstruktur speichern kann, können alle Mitglieder in der Bitsegmentstruktur nur in einer Bitsegment-Speichereinheit und nicht in zwei Bitsegment-Speichereinheiten platziert werden Wenn eine Bitsegment-Speichereinheit nicht alle Mitglieder in der unteren Bitsegmentstruktur aufnehmen kann, werden die verbleibenden Bitsegmente beginnend mit der nächsten Bitsegment-Speichereinheit gespeichert. (Die Größe der Bitsegment-Speichereinheit in VC beträgt 4 Bytes).
2) Wenn es in einer Bitsegmentstruktur nur ein unbenanntes Bitsegment gibt, das 0 Bits belegt, belegt es nur 1 oder 0 Bytes Platz (0 Bytes in der C-Sprache und 1 Bytes in C++, andernfalls alle anderen). der von einer Bitsegmentstruktur belegte Platz ist mindestens so groß wie eine Bitsegmentspeichereinheit;
Testprogramm:
Das Ausführungsergebnis ist: 1 -1 -2 3/*测试位段 201110.12*/ #include<iostream> using namespace std; typedef struct node { unsigned int a:1; //存在一个非0位的位段,则至少占4Byte }S; typedef struct node1 //在C++中占1字节的空间 ,在C中占0字节 { unsigned int :0; }S1; typedef struct node2 { unsigned int a:1; unsigned int :0; //下一个位段放在一个新的位段存储单元 ,所以占4+4=8Byte unsigned c:32; }S2; typedef struct node3 { unsigned int a:4; unsigned int :0; int :6; //这个位段放在一个新的位段存储单元 unsigned c:32;//由于6+32>32,所位段c也放在一个新的位段存储单元,所以占4+4+4=12Byte }S3; typedef struct node4 { unsigned int a:1; char b; //在一个位段存储单元中能够存下所有的成员,所以占4Byte int c:1; int d:2; unsigned int e:2; }S4; nt main(int argc, char *argv[]) { S4 s4; s4.a=1; s4.c=1; s4.d=2; s4.e=3; printf("%d %d %d %d\n",s4.a,s4.c,s4.d,s4.e); printf("%d %d %d %d %d\n",sizeof(S),sizeof(S1),sizeof(S2),sizeof(S3),sizeof(S4)); return 0; }
Bitte drücken Sie eine beliebige Taste, um fortzufahren.
Beim Drucken jedes Bitfelds von s4 weicht das gedruckte Ergebnis vom zugewiesenen Anfangswert ab.
Da c nur 1 Bit belegt, gibt es kein Datenbit. Zu diesem Zeitpunkt wird eine Vorzeichenerweiterung durchgeführt, um 1 direkt zum High-Bit hinzuzufügen, sodass das gedruckte Ergebnis -1 ist Da d 2 Bits belegt, beträgt der im Speicher gespeicherte Inhalt 10, wenn d 2 zugewiesen wird. Zu diesem Zeitpunkt wird eine Vorzeichenerweiterung durchgeführt und das hohe Bit um 1 ergänzt, dann ist es 0XFF FF FF FE sein wahrer Wert ist -2.
Vielen Dank fürs Lesen, ich hoffe, es kann allen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().
