Verwendung des Operators : in C [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Russel

Mögliche Duplikate:

Was bedeutet ‘: number’ nach einem Struct-Feld?
Was bedeutet „unsigned temp:3“?

Ich hasse es, diese Art von Frage zu stellen, aber es nervt mich wirklich, also werde ich fragen:

Welche Funktion hat der Operator : im folgenden Code?

#include <stdio.h>

struct microFields
{
  unsigned int addr:9;
  unsigned int cond:2;
  unsigned int wr:1;
  unsigned int rd:1;
  unsigned int mar:1;
  unsigned int alu:3;
  unsigned int b:5;
  unsigned int a:5;
  unsigned int c:5;
};

union micro
{
  unsigned int microCode;
  microFields code;
};

int main(int argc, char* argv[])
{
  micro test;
  return 0;
} 

Wenn es überhaupt jemanden interessiert, habe ich diesen Code aus dem folgenden Link gezogen:
http://www.cplusplus.com/forum/beginner/15843/

Ich würde es wirklich gerne wissen, weil ich weiß, dass ich das schon einmal irgendwo gesehen habe, und ich möchte es verstehen, wenn ich es wieder sehe.

  • Beachten Sie, dass das Layout von Bitfeldern implementierungsdefiniert ist, sodass das Ergebnis des Zugriffs auf Bitfelder in einem Int über eine Union undefiniert ist. Tun Sie dies nicht im Produktionscode, verwenden Sie stattdessen Bitmasken und Verschiebungen.

    – sternenblau

    22. Juli 2010 um 5:50 Uhr

Benutzer-Avatar
paxdiablo

Sie sind Bitfelder, ein Beispiel dafür unsigned int addr:9; erstellt ein addr Feld 9 Bit lang.

Es wird häufig verwendet, um viele Werte in einen ganzzahligen Typ zu packen. In Ihrem speziellen Fall definiert es die Struktur eines 32-Bit-Mikrocodebefehls für eine (möglicherweise) hypothetische CPU (wenn Sie alle Bitfeldlängen addieren, ergeben sie 32).

Die Vereinigung ermöglicht es Ihnen, einen einzelnen 32-Bit-Wert zu laden und dann mit Code wie (geringfügige Probleme wurden ebenfalls behoben, insbesondere die Deklarationen von code und test):

#include <stdio.h>

struct microFields {
    unsigned int addr:9;
    unsigned int cond:2;
    unsigned int wr:1;
    unsigned int rd:1;
    unsigned int mar:1;
    unsigned int alu:3;
    unsigned int b:5;
    unsigned int a:5;
    unsigned int c:5;
};

union micro {
    unsigned int microCode;
    struct microFields code;
};

int main (void) {
    int myAlu;
    union micro test;
    test.microCode = 0x0001c000;
    myAlu = test.code.alu;
    printf("%d\n",myAlu);
    return 0;
}

Dies gibt 7 aus, was die drei Bits sind, aus denen sich zusammensetzt alu Bitfeld.

Es ist ein Bitfeld. Die Zahl nach dem Doppelpunkt gibt an, wie viele Bits jede Variable belegt.

Das ist ein Deklarator, der die Anzahl der Bits für die Variable angibt.

Weitere Informationen finden Sie unter:

http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx

  • Die Verbindung ist unterbrochen

    – DavidS

    17. September 2018 um 12:20 Uhr

1385620cookie-checkVerwendung des Operators : in C [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy