2017-03-11 3 views
0

Ich möchte die Bitdarstellung der Bitfelder in der Struktur unten drucken. Wenn ich jedoch den Inhalt drucke, sehe ich immer wieder den Wert des ersten Bitfeldes. Was mache ich falsch?So drucken Sie mehrere Bitfelder der Länge 8 in einer Struktur in C

#include <stdio.h> 
#include <limits.h> 

typedef struct Bits { 
    union BitUnion { 
     unsigned int op1 : 8; 
     unsigned int op2 : 8; 
     unsigned int op3 : 8; 
     unsigned int op4 : 8; 
     int num; 
    } BitUnion; 
} Bits; 

void printBitNum(Bits b); 

int main() { 
    Bits test; 
    test.BitUnion.op1 = 2; 
    test.BitUnion.op2 = 5; 
    test.BitUnion.op3 = 'd'; 
    test.BitUnion.op4 = 10; 
    printBitNum(test); 
    return 0; 
} 

void printBitNum(Bits b) { 
    int i; 
    for (i = (CHAR_BIT * sizeof(int)) - 1; i >= 0; i--) { 
     if (b.BitUnion.num & (1 << i)) { 
      printf("1"); 
     } else { 
      printf("0"); 
     } 
    } 
    printf("\n"); 
} 

Antwort

1

bedeutet, dass alle Mitglieder die gleiche Adresse haben. So benennen op1, op2, op3 und op4 alle den gleichen Speicherort.

Ihr Code legt diesen Speicherort auf 10 fest und versucht dann, meist nicht initialisierte Variablen auszudrucken.

Ich denke, Sie wollten die Union mit zwei Mitgliedern haben: die int, und eine Struktur, die die vier Bitfelder enthält.

+0

Sie sind genau richtig! Nach dem Ändern der Datenstruktur zu union hosting die 'struct' und' int' funktioniert alles. – Yos

Verwandte Themen