Heim >Backend-Entwicklung >Golang >Wie überprüft man mit bitweisen Operationen in Go, ob eine bestimmte Rolle in einer Bitmaske enthalten ist?
Bitmaskierung und bitweise Operationen in Go verstehen
Bitmaskierung und bitweise Operationen sind grundlegende Konzepte in der Computerprogrammierung, die die Manipulation von Daten auf binärer Ebene ermöglichen . In diesem Beispiel untersuchen wir diese Konzepte in Go:
<code class="go">package main import ( "fmt" ) const ( isAdmin = 1 << iota isHeadquarters canSeeFinancials canSeeAfrica canSeeAsia canSeeEurope canSeeNorthAmerica canSeeSouthAmerica ) func main() { var roles byte = isAdmin | canSeeFinancials | canSeeEurope fmt.Printf("%b\n", roles) fmt.Printf("Is Admin? %v\n", isAdmin&roles == isAdmin) }</code>
Bitmasking und Bitwise OR
Die Konstanten isAdmin, isHeadquarters usw. stellen Rollenbitmasken dar, wobei Jedes Bit repräsentiert eine bestimmte Rolle. Bei der Bitmaskierung wird ein einzelnes 1-Bit an verschiedene Positionen verschoben, was zu Bitmustern mit nur einem 1-Bit führt. Die bitweise ODER-Operation (|) kombiniert diese Bitmuster und erstellt eine Maske, die jede in der ODER-Operation enthaltene Rolle aktiviert.
Im obigen Beispiel werden Rollen mit dem bitweisen ODER-Operator initialisiert:
<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>
Dadurch wird jedes Bit, das isAdmin, canSeeFinancials und canSeeEurope entspricht, auf 1 gesetzt, während andere Bits 0 bleiben.
Bitweises UND und Überprüfung von Rollen
Der Ausdruck isAdmin&roles == isAdmin prüft, ob Rollen die Rolle isAdmin enthalten. Bitweises UND (&) führt eine logische UND-Verknüpfung für jedes Bit der Eingabebitmuster durch. Das resultierende Bitmuster hat nur 1-Bits, wenn beide Eingabebits 1 sind.
In diesem Fall erzeugt isAdmin&roles ein Bitmuster mit nur einem 1-Bit, was das Vorhandensein der isAdmin-Rolle in den Rollen anzeigt. Durch den Vergleich dieses Ergebnisses mit isAdmin wird sichergestellt, dass „roles“ isAdmin enthält.
Bitweise Gleichheit und Einzelrolle
Im Gegensatz dazu prüft der Ausdruck „roles == isAdmin“, ob „roles“ gleich „isAdmin“ ist . Dies gilt nur, wenn „roles“ ausschließlich die Rolle „isAdmin“ und keine anderen Rollen enthält.
Daher prüft „isAdmin&roles == isAdmin“, ob „roles“ die Rolle „isAdmin“ enthält, während „roles == isAdmin“ streng prüft, ob „roles“ ausschließlich die Rolle „isAdmin“ ist .
Das obige ist der detaillierte Inhalt vonWie überprüft man mit bitweisen Operationen in Go, ob eine bestimmte Rolle in einer Bitmaske enthalten ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!