Ermitteln von Bitpositionen in einer vorzeichenlosen 32-Bit-Ganzzahl

7

Ich glaube, ich hätte in meinem CS-Kurs geschlafen, als sie über Bit-Positionen gesprochen haben, also hoffe ich, dass jemand eine Hand geben kann.

Ich habe eine vorzeichenlose 32-Bit-Ganzzahl (verwenden wir den Wert: 28)

Laut einigen Dokumenten, die ich überarbeite, enthält der Wert der Ganzzahl Flags, die verschiedene Dinge spezifizieren.

Bitpositionen innerhalb des Flags sind von 1 (niederwertig) bis 32 (höherwertig) nummeriert. Alle nicht definierten Flag-Bits sind reserviert und müssen auf 0 gesetzt werden.

Ich habe eine Tabelle, die die Bedeutung der Flags zeigt, mit Bedeutung für die Zahlen 1-10.

Ich hoffe, dass jemand versuchen kann, mir zu erklären, was das alles bedeutet und wie man den "Flag" -Wert aus einer Zahl wie 28, basierend auf der Bitposition, findet.

Danke

    
kdbdallas 29.06.2010, 16:51
quelle

7 Antworten

8

28 wird in binär zu 11100 konvertiert. Das bedeutet, dass die Bits 1 und 2 nicht gesetzt sind und die Bits 3, 4 und 5 gesetzt sind.

Ein paar Punkte: Erstens wird jeder, der wirklich an C gewöhnt ist, die Nummerierung normalerweise bei 0 beginnen, nicht bei 1. Zweitens können Sie einzelne Flags mit dem bitweisen Operator ( & ) testen, wie in:

%Vor%

und so weiter. Sie können auch prüfen, welche Bits in einer Schleife gesetzt sind:

%Vor%

sollte drucken:

%Vor%     
Jerry Coffin 29.06.2010, 17:00
quelle
9

Anstatt jedes einzelne Bit zu durchlaufen, können Sie stattdessen nur die gesetzten Bits durchlaufen, was schneller sein kann, wenn Sie erwarten, dass Bits spärlich gesetzt werden:

Angenommen, das Bitfeld befindet sich im Variablenfeld (skalare Ganzzahl).

%Vor%

Funktioniert ziemlich gut, wenn das Bitfeld nicht auf die Größe eines einzelnen Datentyps beschränkt ist, sondern eine beliebige Größe haben kann. In diesem Fall können Sie 32 (oder was auch immer Ihre Registergröße ist) Bits zu einem Zeitpunkt extrahieren, es mit 0 testen und dann zum nächsten Wort übergehen.

    
invaliddata 14.10.2011 22:47
quelle
3

Um eine int mit dem Wert 0 oder 1 zu erhalten, die nur das n th-Bit von dieser ganzen Zahl darstellt, verwenden Sie:

%Vor%

Aber das ist normalerweise nicht das, was Sie tun möchten. Eine häufigere Redewendung ist dies:

%Vor%

In diesem Fall wird bitN 0 sein, wenn das n th Bit nicht gesetzt ist, und ungleich Null, falls das n th Bit gesetzt ist. (Genauer gesagt ist es der Wert, der nur mit dem n th Bit gesetzt wird.)

    
JSBձոգչ 29.06.2010 17:01
quelle
0

Angenommen flags ist nicht signiert ...

%Vor%

Wenn flags signiert ist, sollten Sie

ersetzen %Vor%

mit

%Vor%     
Doug Currie 29.06.2010 16:56
quelle
0

Verwenden Sie eine Log-Funktion mit der Basis 2. In Python würde das so aussehen:

%Vor%

Wenn die Position keine Ganzzahl ist, wurde mehr als 1 Bit auf 1 gesetzt.

    
user2593263 02.08.2014 02:46
quelle
0

Eine kleine Variation von @ invaliddatas Antwort -

%Vor%     
boolAeon 30.05.2015 06:13
quelle
0
%Vor%     
Chandrakant Agarkar 10.02.2016 07:00
quelle

Tags und Links