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

Patricia Arquette
Freigeben: 2024-10-27 03:07:02
Original
645 Leute haben es durchsucht

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

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

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

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!

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!