Heim Backend-Entwicklung C#.Net-Tutorial Detaillierte Einführung in die Bitsegmente der C-Sprache

Detaillierte Einführung in die Bitsegmente der C-Sprache

Dec 12, 2016 pm 02:33 PM

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位 
    };
Nach dem Login kopieren

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; 
}
Nach dem Login kopieren
4 1 8 12 4

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

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.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

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.

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

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 asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

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.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

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.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

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.

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

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.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

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

See all articles