Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox
Vous êtes dans la section des pages en cours de rédaction. Cette page n'est pas terminée, et peut contenir des informations erronées.

Les opérateurs sur le bit en pratique ( base de données)

Par hubeert (hubeert), le 29 mai 2011

Les bases de données

EN CHANTIER
Cette page n'est pas terminée et est en cours d'écriture.
Savoir ce que sont les opérateurs sur le bit et savoir s'en servir de manière simple.

Avant propos

Il est exclu de comparer un nombre pouvant contenir 32 informations a une base de donnée :-) cependant dans certains cas 32 informations suffisent amplement pour résoudre notre problématique. Mais si 32 champs ne suffisent pas on peut décomposer le nombre en autant de champ multiple de 32 que nous le désirons.

Le plus dur est de modéliser le problème pour arriver a le résoudre avec les opérateurs sur les bit.

Et pourquoi faire çà ? parce que les opérations sur les bit sont extrêmement rapides on économise en temps et en espace.

Mais aussi parce que pour certaine opérations de tri, d'ajout d'option , de retrait d'option , de combinaison de retrait d'option ou de combinaisons d'ajout d'option ; avec les opérateur sur le bit cela est fait en un clin d’œil c'est ce que nous allons voir.

Exemple simple

Nous sommes dans un hôtel et le patron veut donner une idée de prix aux personnes qui réservent par internet en fonction des options et garder un profil du client pour facturer le client lorsqu’il effectuera son séjour.

Il y a 8 options

Chambre a lit simple vaut 35 euro
Chambre a lit double vaut  45 euro
Petit déjeuner vaut 10 euro
Demi-pension vaut 25 euro (déjeuner compris)
Pension complète 40 euro (déjeuner compris)
Salle de bain incluse vaut 10 euro
Télévision internet vaut 5 euro
Accès piscine spa et jacuzzi vaut 10 euro  

Combinons les options dans un seul nombre qui représentera les options choisies.

La première option sera codée sur le bit zéro ; le bit le plus a droite ainsi de suite jusqu’à l’option 7 qui sera codée sur bit 7

Nous pouvons faire de deux façons.

Soit travailler sur une chaine que nous transformerons en nombre . pour le débutant il est plus « visuel » de travailler sur une chaine.En effet sur un chaine on voit directement quel bit est a true ou a false ( 1 ou 0)

Soit travailler sur un nombre.

Le client coche des cases ou pas en fonction de ses désirs.

Nous récupérons la valeur de ces cases.

Coché += 1

Pas coché+ =0

Si on travaille sur un nombre directement

Coché |= Math.pow(2, indiceDeLaCaseCochée) ou coché |=(1«indiceDeLaCaseCochée)

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

Pour l'instant cela n'a pas un gros intérêt car nous serions arrivé au même résultat en ajoutant les différentes options. Mais le patron veut conserver un profil de l'utilisateur et aussi pouvoir enlever ou ajouter des options facilement si le client le demande.

Mais aussi pouvoir faire des statistiques afin de savoir par exemple quelle est l'option la plus choisie ou la moins choisie dans le but d'améliorer le service.

exemple:un client prend

  • chambre simple
  • petit déjeuner
  • la télé
  • L’accès au jacuzzi

cela donne

  • ProfiClientChaine= 11000101
  • ProfilClientNombre= 197

Voila il n'y a plus qu'a stocker un simple chiffre pour savoir ce qu'il a commandé.

durand =197

Monsieur Durand se présente a l'accueil

on veut connaitre son profil.

une simple boucle sur tous les bit avec l'opérateur & et nous saurons quel bit est a true ou pas.

Si nous avons 2000 clients ou plus :-D et que nous voulions savoir quelle sont les options le plus demandées; il suffit de faire 2 boucles une pour examiner tous les clients et lautre qui examine le profil client bit a bit en incrémentant d'une unité l'option correspondante si elle est a true.

Durand ne veut plus profiter du jacuzzi; on lui enlève donc cette option.

durand = 197 ^ (1«7) mais aussi durand &= ~(1«7) (recommandé)

Dans certains cas notamment avec l'opérateur NOR (~) on doit se servir de l'opérateur de groupage ()
~1 << 2 N'egale pas  ~(1<<2) 

Il veut prendre la demi pension. Il faut donc enlever le petit déjeuner (il est compris dans la demi pension) et ajouter l'option demi pension.

On enlève les deux en même temps jacuzzi et petit déjeuner.(on se sert de l’opérateur sur bit &, d'affectation composée &= )

durand &= ~(1«7) & ~(1«2)

et ajouter demi pension(opérateur sur bit d'affectation composée |= )

durand |=(1«3)

Il vaut aussi la douche dans la chambre on va donc ajouter les deux en même temps

durand |=(1«3)  | (1«5) .

durand vaut maintenant 105 !! ;)

c'est a dire une chambre simple + demi pension + douche dans la chambre + la télé

Résumé

Nous savons maintenant.

tester un bit a true ou false avec l'opérateur &

(maVariable & 1«7)) fait quelque chose

ou autre écriture possible

(maVariable & Math.pow(2,7) fait quelque chose

ajouter une ou des options avec l'opérateur |

maVariable |= 1«7

maVariable |= (1«7) | (1«6) | (1«0)

Enlever une ou des options avec l'opérateur ^

maVariable ^= (1«7)

maVariable ^= (1«7) ^ (1«2);

Enlever une ou des options avec l'opérateur & couplé avec l'opérateur NOR ~ (mieux)

maVariable &= ~(1«7) & ~(1«2);

Une base de données plus complexe

Il y a deux cas de figure (Notez que les deux cas peuvent être imbriqués)

  • Il y a plus de 32 options qui puissent être a true ou false.
  • De certaine option découlent d'autres options.

Dans le premier cas ( par exemple une grille de jeu ou plus de 32 positions peuvent être a true ou false).

Il suffit de faire deux variables. Variable1 et Variable2

Variable1 représente les 32 première position.

Variable2 représente de la 33 a 64 eme position. Etc.

Dans le deuxieme cas (par exemple prendre le petit déjeuner implique de choisir l'endroit ou il va être servi.)

Donc monsieur durand choisi de prendre le petit déjeuner. On lui propose alors de le prendre

  • Dans la chambre
  • dans le salon
  • dans la salle a manger
  • Sur la terasse
  • A la piscine

Les options sont représentées par un nombre qui a 5 bit ( 5 possibilités)

Nous avons en pseudo code

si (durand & 1«2 ) ( s'il a choisi petit déjeuner) va voir ou il veut le prendre.

La aussi il suffit de faire 2 variables ou plus si le profil comporte plusieurs sous-option; pour stocker l'ensemble des variables nous pouvons le faire dans un tableau. Pour des raisons de lisibilité on attribuera a la variable un indice correspondant a la place de son bit (rang) plus 1 ( car la place zéro est déjà attribuée a la variable globale.

Monsieur durand veux juste une chambre et le petit dejeuner, il veut prendre celui ci a la piscine.

nous obtenons ceci après traitement la fiche de durand vaut 5 ( une chambre + petit déjeuner) , l'option petit déjeuner vaut 16 (a la piscine)

la fiche de durand se présente comme ceci désormais

durand[0]=Le profil de durand=5

durand[1 + rang de l'option]=16

durand=[5,,,16]

et pour tester.

si (durand[0] & 1«2 ) est vrai; il a choisi le petit déjeuner.

voyons si ce choix a des options

donc si (durand[2+1]) est vrai ca veut dire qu'il y a des options.

il nous reste plus qu'a tester la valeur. pour connaitre l'option. toutes les opérations précédentes sur les bit peuvent être reconduite.

Un QCM (questionnaire a choix multiples)

Les QCM peuvent etre rédigés sous plusieurs forme. La plus simple étant : question ?= oui ou non

exemple: Flash est un logiciel ? = oui ou non

Les plus complexes comportant plusieurs réponses possibles une seule étant la bonne.

Nous avons un QCM simple comportant 10 questions sur flash (un formateur veut tester le niveau d'un postulant à un stage) ou il faut répondre par vrai ou faux avec des cases a cocher.

Une case cochée donne true ou 1.

Une case pas cochée donne false ou 0 ( on peut également faire deux cases vrai ou faux et si c'est vrai compter 1 ; si c'est faux ne rien faire étant le plus simple :-D

Les réponses sont donc mises sous forme d'un chiffre binaire

par exemple le candidat réponds vrai a la question 1 on active reponseCandidat |=1«0 ; il répond vrai a la question 8 reponseCandidat |=1«8, a la 9 il reponds faux soit fait rien soit on on impute avec & (on se souvient que 0 & 1 égale 0 ; mais ici ca ne sert a rien de faire ca) ) reponseQuestionnaire &=(1«9)

le formateur a un grille de réponses idéales sous forme d'un chiffre binaire par exemple si la question 1 est vraie on active reponseQuestionnaire |=1«0 si la question 8 est vrai reponseQuestionnaire |=1«8, si la 9 est fausse soit on fait rien soit on fait comme précédemment.

a la fin nous avons :

La grille formateur stockées comme ceci reponseQuestionnaire =1010011001 c'est la “grille” des réponse idéales qu'a le formateur.

et la grille du candidat :

Le candidat réponds ses réponses sont mises sous forme reponseCandidat=1011011010 (avec les même outils que précédemment.

Le formateur veux savoir ce qu'a répondu le candidat il lui suffit de faire appel a l’opérateur sur les bit ^ XOR souvenez vous celui ci compare les bit un a un il renvoi 0 si les bit sont a 1 dans les deux opérandes ou 0 sit les deux bit sont a zéro ; il renvoi 1 si un des deux bit est a true.

En résumé il renvoi zéro si les bits sont identiques et un dans le cas contraire

donc.

grille du formateur = 1010011001

^

réponse du candidat = 1011011010

égale réponses fausses= 0001000011 ( il faut lire ici : celles qui ne sont pas identiques dans les deux opérandes.)(il y a trois réponses non-identiques donc elles sont fausses chez le candidat puisque le formateur a les bonnes réponses :D)

le candidat a 3 réponses fausses (celle qui sont a 1 dans le résultat) ; si on veut savoir lesquelles il suffit de connaitre leur rang.

Si on veut savoir les réponses vraies; soit on inverse le résultat ; soit on inverse un des deux opérandes ( avec l'opérateur ~ NOT ou NOR, soit on inverse rien et on considère que 0 est vrai et 1 est faux et zéro représente le vrai. c'est juste une convention d'écriture.

Comme dit précédemment le moins évident est de savoir sur quel modèle les appliquer. Mais si vous n’êtes pas convaincu il tombe sous le sens que reponseQuestionnaire ^ reponseCandidat = reponseFausses est plus simple a faire que

si la reponseCandidat n’égale pas la reponseQuestionnaire et cela dix fois pour un questionnaire de 10 items , pour avoir mes reponseFausses , c'est pas comparable

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

rond.asquiz1.fla

Nous allons voir les QCM plus complexes;

Conclusion

Les opérateurs sur les bit nous permettent de faire du code très compact et très rapide pour tester,comparer, ajouter, retirer un élément sur un nombre qui représente le résultat d'un formulaire par exemple ; lequel nombre peut être facilement stocké avec ses attributs(Les sous options).

Le binaire dans les jeux : "hitTest"

Le binaires et ses opérateurs; Exemple

Généralité sur les opérateurs binaires,Par Thoutmosis

Le binaire et la representation des nombres,Par Thoutmosis