Heim >Backend-Entwicklung >Golang >Wie funktionieren bitweise Operationen und Maskierung in Go und warum wird „isAdmin & Roles == isAdmin' als „True' ausgewertet?

Wie funktionieren bitweise Operationen und Maskierung in Go und warum wird „isAdmin & Roles == isAdmin' als „True' ausgewertet?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 03:07:02720Durchsuche

How Do Bitwise Operations and Masking Work in Go, and Why Does

Bitmaskierung und bitweise Operationen in Golang: Bitweise Logik verstehen

In Go bieten Bitmaskierung und bitweise Operationen effiziente Möglichkeiten zur Manipulation von Binärdaten. Lassen Sie uns untersuchen, wie diese Vorgänge funktionieren, und Ihre Verwirrung bezüglich der Bitmaskierung klären.

Bitmasking: Eine Einführung

Bitmasking ist eine Technik, die speziell gestaltete Konstanten verwendet, um verschiedene Rollen oder Berechtigungen darzustellen. In Ihrem Codeausschnitt haben Sie die iota-Konstante verwendet, um eine Reihe von Konstanten zu erstellen, die jeweils ein einzelnes „1“-Bit an einer bestimmten Position enthalten. Diese Konstanten werden dann verwendet, um eine Rollenvariable mit bitweisem ODER ('|') zu erstellen:

<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>

Diese Operation setzt die „1“-Bits in Rollen so, dass sie mit den Positionen der „1“-Bits in den drei übereinstimmen Konstanten. Die Visualisierung der binären Darstellungen hilft:

isAdmin          00000001
canSeeFinancials 00000100
canSeeEurope     00100000
-------------------------
roles            00100101

Bitweises UND und Maskierung

Ihre Verwirrung entsteht durch die in dieser Zeile verwendete bitweise UND-Operation ('&'):

<code class="go">fmt.Printf("Is Admin? %v\n", isAdmin &amp; roles == isAdmin)</code>

Dieser Vorgang prüft, ob isAdmin in der Rollenvariablen festgelegt ist. Der Ausdruck lautet jedochAdmin & „roles“ gibt eine Zahl zurück, die nur dann „1“-Bits enthält, wenn sowohl „isAdmin“ als auch „roles“ „1“-Bits haben.

Da in Ihrem Fall „roles“ das isAdmin-Bit enthält, ist das Ergebnis von „isAdmin &“ Die Rollen entsprechen isAdmin. Aus diesem Grund wird der Ausdruck als wahr ausgewertet.

Wenn Sie jedoch die weniger strenge bitweise Gleichheit (==) verwenden, vergleichen Sie die gesamte binäre Darstellung von Rollen mit isAdmin. Da Roles zusätzliche Bits enthält, ist es nicht gleich isAdmin, was zu false führt.

Fazit

Bitmaskierung und bitweise Operationen sind leistungsstarke Werkzeuge, mit denen Sie logische Operationen an Binärdaten effizient durchführen können. Wenn Sie die Konzepte hinter der Bitmanipulation verstehen, können Sie robusteren und effizienteren Code in Go schreiben.

Das obige ist der detaillierte Inhalt vonWie funktionieren bitweise Operationen und Maskierung in Go und warum wird „isAdmin & Roles == isAdmin' als „True' ausgewertet?. 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