Wie überprüft man mit bitweisen Operationen in Go, ob eine bestimmte Rolle in einer Bitmaske enthalten ist?

Susan Sarandon
Freigeben: 2024-10-26 20:16:03
Original
533 Leute haben es durchsucht

How do you check if a specific role is included in a bitmask using bitwise operations in Go?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!