Maison  >  Article  >  développement back-end  >  Comment vérifier si un rôle spécifique est inclus dans un masque de bits à l'aide d'opérations au niveau du bit dans Go ?

Comment vérifier si un rôle spécifique est inclus dans un masque de bits à l'aide d'opérations au niveau du bit dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 20:16:03524parcourir

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

Comprendre le masquage de bits et les opérations au niveau du bit dans Go

Le masquage de bits et les opérations au niveau du bit sont des concepts fondamentaux de la programmation informatique qui permettent la manipulation des données au niveau binaire . Dans cet exemple, nous explorons ces concepts dans 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 et Bitwise OR

Les constantes isAdmin, isHead quarters, etc., représentent les masques de bits de rôle, où chaque bit représente un rôle spécifique. Le masquage de bits consiste à déplacer un seul bit de 1 vers différentes positions, ce qui entraîne des modèles de bits avec un seul bit de 1. L'opération OU au niveau du bit (|) combine ces modèles de bits, créant un masque qui active tout rôle inclus dans l'opération OU.

Dans l'exemple ci-dessus, les rôles sont initialisés à l'aide de l'opérateur OU au niveau du bit :

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

Cela définit chaque bit correspondant à isAdmin, canSeeFinancials et canSeeEurope à 1, tandis que les autres bits restent à 0.

ET au niveau du bit et vérification des rôles

L'expression isAdmin&roles == isAdmin vérifie si les rôles incluent le rôle isAdmin. AND au niveau du bit (&) effectue une opération ET logique sur chaque bit des modèles de bits d'entrée. Le modèle de bits résultant n'a que 1 bits où les deux bits d'entrée sont 1.

Dans ce cas, isAdmin&roles produit un modèle de bits avec un seul 1 bit, indiquant la présence du rôle isAdmin dans les rôles. La comparaison de ce résultat avec isAdmin garantit que les rôles incluent isAdmin.

Égalité au niveau des bits et rôle unique

En revanche, l'expression rôles == isAdmin vérifie si les rôles sont égaux à isAdmin . Cela n'est vrai que lorsque les rôles contiennent exclusivement le rôle isAdmin et aucun autre rôle.

Par conséquent, isAdmin&roles == isAdmin vérifie si les rôles contiennent le rôle isAdmin, tandis que rôles == isAdmin vérifie strictement si les rôles sont uniquement le rôle isAdmin. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn