Heim >Backend-Entwicklung >Golang >Wie funktionieren bitweise Operationen und Maskierung in Go und warum wird „isAdmin & Roles == isAdmin' als „True' ausgewertet?
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 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
Ihre Verwirrung entsteht durch die in dieser Zeile verwendete bitweise UND-Operation ('&'):
<code class="go">fmt.Printf("Is Admin? %v\n", isAdmin & 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.
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!