Heim  >  Artikel  >  Backend-Entwicklung  >  Wie überprüft man mit bitweisen Operationen in Go, ob eine bestimmte Rolle in einer Bitmaske enthalten ist?

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

Susan Sarandon
Susan SarandonOriginal
2024-10-26 20:16:03524Durchsuche

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>

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!

Stellungnahme:
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