Bitmask : OR sur plusieurs positions en une ligne, est-ce possible ?

Vérifier en quelques opérations binaires combinées la présence de l'un ou l'autre masque

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous !

Je fais mumuse avec les bitmasks dans une base de données existante aujourd’hui. Outre le fait qu’ils me semblent ici mal appliqués (on ne devrait jamais avoir qu’un bit d’armé selon la logique d’utilisation), je dois extraire les enregistrements qui ont l’un ou l’autre statut, donc l’un ou l’autre bit armé. Il faut que ce soit extensible, parce que si les valeurs de l’ensemble à extraire sont définies en ce moment, je me doute que cela augmente rapidement.

Je me demandais s’il existait une (suite d’)opération(s) binaire combinables qui permette de détecter si l’un ou l’autre bit était armé ? La suite de BIT_AND() avec des OR (en SQL, donc pas binaires) me paraît peu optimale ni pratique…

Merci d’avance

Edit

En fait, je me focalisais trop sur le fait que quand on utilise BIT_AND(), il faut vérifier que le résultat équivaut bien au masque qu’on a utilisé. Mais si on vérifie simplement qu’on a un masque quelconque non vide en retour, ça devrait faire le travail. En imaginant que l’on utilise des nombres, si BIT_AND(nombre, masque) == masque permet de confirmer qu’on a exactement le masque, BIT_AND(nombre, masque) != 0 permet de savoir si le masque s’applique partiellement, ce qui me semble être ce que je recherche.

+0 -0

On peut détecter 4 situations :

  • BIT_AND(nombre, masque) == masque : tous les bits du masque sont à 1.
  • BIT_AND(nombre, masque) != 0 : au moins un des bits du masque est à 1.
  • BIT_AND(nombre, masque) == 0 : tous les bits du masque sont à 0.
  • BIT_AND(nombre, masque) != masque : au moins un des bits de masque est à 0.

Si le masque n’a qu’un seul bit positionné, les 2 premiers sont équivalents et indiquent que le bit est à 1, les deux derniers sont équivalents et indiquent que le bit est à 0.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte