Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda menyemak sama ada peranan tertentu disertakan dalam bitmask menggunakan operasi bitwise dalam Go?

Bagaimanakah anda menyemak sama ada peranan tertentu disertakan dalam bitmask menggunakan operasi bitwise dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-26 20:16:03524semak imbas

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

Memahami Operasi Bitmasking dan Bitwise dalam Go

Bitmasking dan operasi bitwise ialah konsep asas dalam pengaturcaraan komputer yang membenarkan manipulasi data pada peringkat binari . Dalam contoh ini, kami meneroka konsep ini dalam 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 dan Bitwise ATAU

Pemalar ialahAdmin, isHeadquarters, dsb., mewakili bitmasks peranan, di mana setiap bit mewakili peranan tertentu. Bitmasking melibatkan peralihan 1 bit tunggal ke kedudukan yang berbeza, menghasilkan corak bit dengan hanya satu 1 bit. Operasi OR bitwise (|) menggabungkan corak bit ini, mencipta topeng yang mengaktifkan sebarang peranan yang disertakan dalam operasi OR.

Dalam contoh di atas, peranan dimulakan menggunakan operator bitwise OR:

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

Ini menetapkan setiap bit yang sepadan dengan isAdmin, canSeeFinancials dan canSeeEurope kepada 1, manakala bit lain kekal 0.

Bitwise AND dan Menyemak Peranan

Ungkapan isAdmin&roles == isAdmin menyemak sama ada peranan termasuk peranan isAdmin. Bitwise AND (&) melakukan operasi AND logik pada setiap bit corak bit input. Corak bit yang terhasil mempunyai 1 bit sahaja dengan kedua-dua bit input ialah 1.

Dalam kes ini, isAdmin&roles menghasilkan corak bit dengan hanya satu 1 bit, menunjukkan kehadiran peranan isAdmin dalam peranan. Membandingkan hasil ini dengan isAdmin memastikan bahawa peranan termasuk isAdmin.

Bitwise Equality and Single Role

Sebaliknya, ungkapan roles == isAdmin menyemak sama ada peranan adalah sama dengan isAdmin . Ini benar hanya apabila peranan secara eksklusif mengandungi peranan isAdmin dan tiada peranan lain.

Oleh itu, isAdmin&roles == isAdmin menyemak sama ada peranan mengandungi peranan isAdmin, manakala roles == isAdmin menyemak dengan ketat sama ada peranan adalah semata-mata peranan isAdmin .

Atas ialah kandungan terperinci Bagaimanakah anda menyemak sama ada peranan tertentu disertakan dalam bitmask menggunakan operasi bitwise dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn