2017-03-20 4 views
0

I definiert die folgende Struktur:Wie kann ich alle möglichen Werte von n Bits in der Basis 2 mit n Bits in C darstellen?

typedef struct 
{ 
    int unused :8; 
    int group :2; 
    int opcode :4; 
    int source_mode :2; 
    int dest_mode :2; 
    int are  :2; 

}first_word; 

Ich möchte jedes Feld der Lage sein, alle möglichen Werte zu halten, die die Bits dargestellt werden kann es in der Struktur erhalten, in der Basis 2.

zum Beispiel:

Die möglichen Werte eines Feldes 2 Bits enthält, wäre:

00 /*0 in base 2*/ 
01 /*1 in base 2*/ 
10 /*2 in base 2*/ 
11 /* 3 in base 2 */ 

Da in 10 dezimal rep unter Verwendung von 4 Bits in der Basis übel genommen 2, ich kann das nicht tun:

int main() 
{ 
    first_word fw; 
    fw.group = 10; 
    return 0; 
} 

denn sonst würde ich die folgende Fehlermeldung erhalten:

main.c: In function ‘main’: 
main.c:21:17: warning: overflow in implicit constant conversion [-Woverflow] 
     fw.group = 10; 
       ^~ 

Ebenso mag ich die Opcode Lage sein, alle zu halten die möglichen Werte mit 4 Bits und so weiter.

Wie kann ich das erreichen?

+0

'int gruppe: 4;' ...... Nicht klar für mich ... – LPs

+0

Ich möchte Gruppe nur 2 Bits enthalten, also habe ich Bitfelder verwendet @LPs – Float

+2

Sie können beginnen, indem Sie die Felder unsigned, Denn das ist es, wonach du ohnehin zu sein meinst. – StoryTeller

Antwort

2

Konvertieren Sie Ihre Binärzahl in Dezimal, bevor Sie sie speichern.Wie konvertiert binär 10 zu 2 vor dem Speichern in group.

Ich wollte dies kommentieren, konnte aber wegen des niedrigen Rufs nicht.

Edit- Wenn Sie C++ verwenden, können Sie es direkt konvertieren 0b. Beispiel-

0b1 bedeutet binäre 1 oder dezimal 0

0b10 bedeutet binär 10 oder deciaml 2

0b100 binäre oder dezimale 4 100

oder in Standard-C bedeutet, können Sie eine Funktion machen, dass dauert binary format Integer wie 10 in unserem Fall und gibt den konvertierten Dezimalwert 2 zurück. Später können Sie Ihre Bits mit bitweisen Operationen wie Verschiebungen abrufen.

+0

Danke! Ich denke, ich verstehe es noch nicht. Können Sie bitte ein Beispiel geben? @Monster – Float

Verwandte Themen