Tutoriaux (Cliquez ici pour afficher la liste avec les descriptions)
Tutoriaux GameMaker

       Débutant

Tutoriel : Débuter avec Game Maker
Mark Overmars Glog:Accélérer le Temps de Chargement
L'appellation des ressources dans Game Maker.
Tutorial: Convertir un .gmk en .gm6!
Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie I:Débutant
Tutorial : Les variables de déplacement
Tutorial sur sa Boîte de Dialogue et des Astuces pour qu'elle soit plus Esthétique
Comment faire? Les Textes à la STARWARS
Dessiner des Graphismes pour un Jeu Vidéo, conseils & connaissances de bases
Initiation à la création de Jeux Vidéos avec GameMaker
Pong
Aide GameMaker 6.1 en Français
Tutoriel: GameMaker 5.3a en Français
Explication du D&D
Tuto mise en main: Casse Brique
       Intermédiaire

Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie II:Intermédiaire
Les collisions en gml
Mark Overmars Glog: Astuces sur Game Maker - Une aide plus jolie
Tutoriel Game Maker - Les Primitives
Tutoriel Game Maker - Les Couleurs en GML
Compressez un .wav tout en gardant son format
Tutorial: Les ressources externes
Créer ses propres extensions sous Game Maker 7
Tutoriel GameMaker : Les fichiers ini
Tutorial d'apprentissage des timelines et des paths
Alléger son jeu avec Game Maker
Collisions Nettes pour le mapping
Création d'un programme de dessin basique
Les variables et les constantes
FTP DLL
Créer une Variable
       Avancé

Les opérateurs binaires
Les opérateurs binaires

Somaire
1- Introduction aux opérateurs binaires
2- Bases et conversion (facultatif)
3- Calculs avec les opérateurs binaires
4- Regles binaires
5- Opérateurs de décalage << et >>
6- Opérateur de complément ~
7- Le systeme héxadécimal
8- Utilité de ces opérateurs

Ce tutoriel auras pour but d'expliquer le fonctionnement des opérateurs binaires (bitwise), qui sont croyez moi très utiles bien qu'assez obscur au premier abort. La partie 8 est la partie la plus interressante car elle montre leurs utilité.


1- Introduction aux opérateurs binaires

Il existe en tout 6 opérateurs binaires :
-Le et (and) noté &
-Le ou inclusif (or) noté |
-Le ou exclusif (xor) noté ^
-Le décalage a droite >>
-Le décalage a gauche <<
-L'opérateur de complément ~

Les trois premiers opérateurs se présentent sous trois formes, avec une forme qui permettra de calculer avec des nombres, et une autre calculer des bits entre eux.
-Le et peut s'écrire : & , && , and
-Le ou inclusif peut s'écrire : | , || , or
-Le ou exclusif peut s'écrire : ^ , ^^ , xor

Un bit peut avoir seulement deux valeurs (étant de base 2), 0 ou 1.
En fait physiquement cela correspond a la polarisation en spin d'un électron (spin down ou spin up).
En programmation 1 et 0 correspondent a vrai et faux.

Les opérateurs binaires sont des opérateurs logiques :
Par exemple si on vous dit qu'une information est vraie et qu'une autre information l'est aussi, on pourras considérer que l'information totale est vraie. Or si une des deux informations est erronnée, l'information globale seras alors elle aussi erronnée.
C'est tout simplement comme ça que fonctionne l'opérateur and.

Si on remplace vrai par 1 et faux par 0, on a alors :
1 and 1 = 1
1 and 0 = 0, de même 0 and 1 = 0
0 and 0 = 0
Voila donc le fonctionnement du and.
J'avais dit précédement que and, && et & n'avaient pas tous la même utilitée.
En fait le && est la vrai syntaxe en programmation du and, donc ils s'utilisent de la même manière, mais ne servent eux qu'a comparer seulement deux bits entre eux.
Le & lui sert à comparer quand à lui deux nombres entre eux.

Pour comparer deux nombres entre eux il faut tout d'abord les ecrire en base 2, s'ils sont en base 10.
Nous fonctionnons (nous les humains) en base 10, certainement car nous possédons dix doigts, mais les machines elles fonctionnent en base 2 (voir Spintronique pour savoir pourquoi).


2- Bases et conversion (facultatif)

Cette partie est facultative puisque la conversion base 10 <=> base 2 peut se faire avec la calculatrice de Windows bien que rien ne vous empeche d'apprendre ce mécanisme si vous ne savez pas déja le faire.

Nous possédons donc 10 chiffres permettant d'ecrire tous nos nombres :
0, 1, 2, 3, 4, 5, 6, 7, 8, et 9.
Pour la base de 2 on a juste 0 et 1.

Exemple de nombres en base 10 puis en base 2 :
666 <=> 1010011010
23 <=> 10111
13 <=> 1101
2012 <=> 11111011100

a) Conversion base 2 vers base 10

Pour convertir un nombre de base 2 en un nombre de base 10 rien de plus simple, il suffit en partant de la droite multiplier chaque chiffre par 2 puissance sa position.
Exemple, avec ^ signifiant puissance et pas xor, et * signifiant multiplier :
10111 base 2 = 1*2^0 + 1*2^1 + 1*2^2 + 0*2^3 + 1*2^4 = 1 + 2 + 4 + 0 + 16 = 23

b) Conversion base 10 vers base 2

Pour passer de la base 2 à la base 10 c'est un peu plus compliqué.
Une méthode simple consiste a imaginer notre nombre de base 10 sous forme de billes par exemple, puis d'imaginer des boites pouvant contenir un certain nombre de billes. Nos boite seront classées de cette manière, dans un ordre decroissant du nombre de billes qu'elles peuvet contenir.
Si on a 123 à covertir en base 2, il suffit de ce dire que l'on possède 123 billes.
Ensuite il faut chercher une puissance de 2 suppérieure a notre nombre de billes.
Ici pour 123 on auras donc 2^7 = 128
Nos boites sont donc disposées de cette maniere (les [] signifient boite et le nombre a l'interieur est le nombre de bille que peut contenir la boite, de plus on commence à 2^(7-1) soit 2^6 ) :
[2^6] [2^5] [2^4 ] [2^3] [2^2] [2^1] [2^0] soit
[64] [32] [16] [8] [4] [2] [1]
Maintenant nous allons remplir nos boites de billes avec une regle simple, il faut remplir entierement une boite de bille (1) ou la laisser vide et passer a la suivante si on n'a pas assez de billes (0).
Ce qui nous donne :
[64] : 1, on peut la remplir entierement, il nous reste donc 123-64 billes, soit 59.
[32] : 1, il nous reste 59-32 = 27 billes.
[16] : 1, il nous reste 11 billes.
[8] : 1, il nous reste 3 billes.
[4] : 0, on ne peut pas remplir entierement notre boite, on passe à la suivante.
[2] : 1, il nous reste une bille.
[1] : 1, on a remplis toutes les boites.

123 s'écrit donc en base 2 : 1111011.

Astuce : pour trouvé la puissance de la dernière boite on peut faire un log de base 2 de notre nombre de base 10 et tronquer. Ici on aurait log2(123) = 6,94 et des poussieres, donc 6 si on tronque, or 2^6 = 64, ce qui est bien la contenance de notre premiere boite.
Si vous ne possedez pas le log2 il suffit de faire log(x)/log(2) est le résultat est le même.


3- Calculs avec les opérateurs binaires

Nous avons donc vu le and, et le &&, qui ne permettent que de faire des calculs entre deux bits.
Le & sert comme les autres opérateurs mathématiques a faire des calcules entre deux nombres.
Pour calculer nombre1 & nombre2 il faut convertir nombre1 et nombres1 en base 2. Ensuite on a plus qu'a comparer chaque bits des deux nombres entres eux.

Exemple :
549 & 320 = 10 0010 0101 & 01 0100 0000 (base 2)
Ensuite il suffit de calculer les bits des deux nombres entre eux selon les regles de and :

1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
0 & 0 = 0
0 & 0 = 0
1 & 0 = 0
0 & 0 = 0
1 & 0 = 0

donc 549 & 320 = 0

Les opérateurs or et xor fonctionnent selon le même principe.
|| et or servent à calculer deux bits entre eux et | deux nombres.
^^ et xor de même deux bits et ^ deux nombres.

4- Regles binaires

Voici donc les regles pour les opérateurs &, | et ^
-and
1 & 1 = 1
1 & 0 = 0
0 & 0 = 0
-or
1 | 1 = 1
1 | 0 = 1
0 | 0 = 0
-xor
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0

5- Opérateurs de décalage

Les opérateurs << et >> sont des opérateurs de décalage des bits
<< décale les bits à gauche, donc pour un nombre xxxx de base 2, alors xxxx<<3 = xxxx000
>> fonctionne de la même manière mais décale les bits a droite.
<< 1 reviens donc à multiplier par 2, et << 2 par 4, soit << x a multiplier par 2^x (avec ^ signifiant puissance).

Exemples :
125 << 2 = 1111101 << 2 = 111110100 = 500
92 >> 3 = 1011100 >> 3 = 1011 = 11


6- Opérateur de complément ~

L'opérateur ~ sert a inverser les bits d'un nombre. Il faut faire attention car selon le type de variables les valeurs ne sont pas les mêmes.
Pour un unsigned char (un entié tenant sur octet non signé), ~12 = 243 car
12 = 00001100 base 2 donc ~12 = 11110011 base 2 = 243
Sous Game Maker ~x seras égal à -x-1.


7- Le systeme héxadécimal

Le systeme héxadécimal est un systeme très interressant car il est très simple de faire passer un nombre de base 2 à base 16 (de héxa).
Le systeme héxadécimal étant un systeme de base 16 il utilise donc les premieres lettres de l'alphabet en complément des chiffres traditionnels :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Pour convertir un nombre de base 2 codé sur un octet il sufit de le couper en deux paquets, puis calculer a quoi correspondent chaque paquet puis remplacer par les symboles correspondants.
Par exemple :
10011101 = 9D base 16 car
1001 = 9 base 10 donc 9 base 16 et
1101 = 13 base 10 soit D en héxa


8- Utilité de ces opérateurs

Ces opérateur sont d'une utilité incroyable lorsque l'on programme et surtout lorsque l'on commence à ce raprocher de la machine. Je vais montrer de nombreux exemples à travers lesquels vous verez toute la puissance des opérateur bitwise.

Exemple 1 : Les couleurs
Les couleurs sont la plupart du temps codés sur 24bits, avec un octet pour le rouge, un autre pour le vert et le dernier pour le bleu, soit 8bits pour chaque couleurs, c'est le format RGB (pour red green blue).
Une couleur est donc composée de rouge, de vert et de bleu avec chacune de ces couleurs primaires allant de 0 à 255.
En héxadécimal on a donc toutes les valeurs possibles du noir 000000 au blanc FFFFFF soit 16777216 couleurs possibles !
Sous GM le rouge est codé sur le premier octet a droite, le vert sur l'octet du milieu et le bleu l'octet a gauche.
Couleur : [Bleu][Vert][Rouge]

Donc pour créer une couleur avec du rouge, du vert et du bleu il faut remplir le premier octet a droite avec le rouge, le second avec le vert et le dernier avec le bleu.
Soit : couleur = (bleu<< 2 octets) + (vert << 1 octet) + (rouge << 0 octet)
ce qui donne : couleur = (bleu << 16) + (vert << 8 ) + rouge
Faire << 8 revient a multiplier par 256 mais les opérateurs binaire sont plus rapides donc il vaut mieux les utiliser, de plus c'est plus propre et plus compréhensible.

Maintenant si l'on veut récupérer la tonalité de bleu d'une couleur il va faloir tout simplement récupérer le premier octet de celle-ci.
Par exemple pour la couleur 94F388 la tonalité de bleu est 94.
Il suffit de décaler les bits a droite jusqu'a qu'il ne reste que l'octet qui nous interresse soit le premier en partant de la gauche. On a donc :
bleu = couleur >> 16

Pour récuperer le vert on va procéder de la même manière :
vert = couleur >> 8
Mais ensuite comment fait-on ? Il reste l'octet codant le vert mais aussi celui qui code le bleu : [bleu][vert], on a réussit a virer l'octet codant le rouge mais il faut aussi virer celui qui code le bleu.
C'est la qu'intervient l'opérateur &. En fait il va nous permettre de récupérer notre octet :
vert = (couleur >> 8 ) & FF
Explication (x est un bit) : comme 0 & x est toujours égal à 0, et que 1 & x est toujours égal à x, faire XXYY & FF signifie donc faire XXYY & 00FF or comme on l'a vu juste avant XX & 00 seras donc égal à 0 et FF (héxa) étant donc 11111111 (base 2), YY & FF seras donc égal à YY.

Donc pour récupérer le rouge :
Le rouge étant dans [XX][YY][ZZ] à la troisieme position, il suffit donc de faire [XX][YY][ZZ] & FF car on ne garderas que le premier octet de droite. On a donc :
rouge = couleur & FF


Exemple 2 : Modifier un octet bit a bit
Si [XX] est un octet, soit [abcdefgh] en base 2 avec abcdefgh des bits, comment récupérer un des bits ou même le modifier ?
En fait c'est très simple, et les seuls opérateurs dont on auras besoin vous l'avez compris c'est & , << et >>.

Récupérer c :
Pour récupérer c, il va falloir détruire tous les autres bits, on va donc utiliser & pour ça :
[abcdefgh] & [00100000] = [00c00000]
Maintenant pour isoler c il faut le décaller pour qu'il soit en premiere position a droite :
[00c00000]>>5 = c

Récupérer un bit en général :
pour récupérer un bit en général dans un nombre on utilise d'abord & puis on décale. La seule infos dont on à besoin c'est la position du bit dans le nombre (ici ^ signifie puissance).
Bit = ( nombre & 2^position ) >> position


Exemple 3 : xor et la cryptographie

^ est très interressant car il nous permet de crypter des bits avec d'autres bits.
Ce qu'il y a de très pratique avec ^, c'est cette propriétée :
a ^ b = c
c ^ b = a
De cette manière on peut faire :
Cryptage =>
[octet secret ] ^ [ octet clé ] = [ octet crypté ]
<= Décryptage
[ octet crypté ] ^ [ octet clé ] = [octet secret ]

A vous de faire un petit algo de cryptage pour vous entrainer .

Auteur du tutorial : onilink_
19/02/2010 par M@d_Doc
10 Commentaires

par Linky439 @ 19/02/2010 09:25 am
lol j'ai perdu le fil aux nombres en binaires x)
Trop compliqué pour moi qui vient quasiment de me lever x)
Mais bien sinon hap

par bibi675 @ 19/02/2010 09:45 am
Excellent tutoriel ! Bravo Onilink_ ! super

par Topaze22 @ 19/02/2010 05:35 pm
Wow, tuto de folie ! Je me demande comment vous faite pour vous motiver à sortir des cours magistraux comme ça !?
super

par SonicZeldaMario @ 19/02/2010 06:36 pm
gha non3 ouh ouh ouh ouh ouh ouh gha gha

par daminetreg @ 23/02/2010 08:42 am
Bon tutorial, c'est vrai que sans un tel tuto il est fort probable que beaucoup de débutant en programmation, notamment s'ils passent pas la case game maker, n'ait pas connaissances de l'utilité des opérateurs binaires.

Good job done! ^^ happy1

par Ordinateur @ 10/03/2010 02:14 am
ange 100110111001010000100110101

sinpa

par gabin49 @ 15/03/2010 10:48 pm
magnifique tuto, moi meme je ne savais pas ce qu'etait ces signes : ^, ^^,<<, >>
j'en ai appris dans ce tuto, meme si j'en aurai pas vraiment l'utilité, il est très bien détaillé

par Need @ 19/04/2010 06:22 pm
question

par red-error @ 29/05/2010 01:43 pm
J'avais lu, mais décroché, maintenant c'est un peu plus clair, bravo !

Presque compris. happy1

par Red-error @ 01/08/2010 11:41 am
Encore relu, et cette fois-ci c'est la bonne. :D
Ca manque franchement de schémas pour visualiser en fait, ou de se munir d'une feuille ou de bloc-note pour s'accrocher.

Nom:
Mail: (optionel)
Êtes vous Humain? (Entrez oui si c'est le cas)

smile:

fleche_dfleche_gbehgniihappy1questionrirerire2rougesupertristeangeclincoeurcoleredodofierghagniahhaphehehhontenonnon3ouhouisnif

| M'oublier
       Expérimenté

Tutoriel:Rendre son jeu compatible avec l'explorateur de jeux de Vista
Modifier la base de registre avec Game Maker

Tutoriaux Graphismes

       Paint

Le graphisme facile n°2
Le graphisme facile n°1
Tutoriel Paint: Le desert pour les nuls
Tutoriel Paint: Comment faire un ciel étoilé
Tutorial Paint: Tutorial d’utilisation avancée de paint
Tutoriel Paint: Comment faire un décor de vaisseau spacial
Tutorial Paint: Dessin d'un Paysage
       Paint shop pro 7

Tutoriel: Effets spéciaux à la Star Wars !
       The Gimp

Tutoriel - The Gimp - Texte métallique
Tutoriel - The Gimp : Effet de Reflet Realiste
       PhotoShop

Tutoriel - PhotoShop : Soleil

Tutoriaux Mods de Jeux Vidéos

       UnrealEd 3

Tutoriaux Unreal Ed 3 - Débuter