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
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:
und so weiter. Sie können auch prüfen, welche Bits in einer Schleife gesetzt sind:
%Vor%sollte drucken:
%Vor%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.
Um eine int
mit dem Wert 0
oder 1
zu erhalten, die nur das n
th-Bit von dieser ganzen Zahl darstellt, verwenden Sie:
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.)
Angenommen flags
ist nicht signiert ...
Wenn flags
signiert ist, sollten Sie
mit
%Vor%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.
Tags und Links c bit-manipulation