Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Les opérateurs binaires

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par Thoutmosis, le 24 janvier 2010

Bonjour et bienvenue dans ce tutoriel consacré aux opérateurs binaires. Ce tutoriel est aussi la seconde partie d'un dossier consacré à l'optimisation. Ici vous allez apprendre ce que sont les opérateurs binaires et comment vous en servir. Si vous n'êtes pas familier avec le système binaire et la représentation des nombres en base 2, je vous conseille de lire attentivement ce tutoriel avant d'attaquer la lecture de celui-ci.

Commençons sans plus tarder !

Les opérateurs binaires c'est quoi ?

Avant de parler de binaire, parlons d'opérateurs. Qu'est-ce qu'un opérateur ? Dans un langage de programmation un opérateur est un mot ou un caractère clé qui nécéssite au minimum une expression ou opérande. Sa fonction est d'agir sur ou avec ces opérandes afin de retourner un résultat.

Bon je me doute que l'explication en elle-même ne vous éclaire pas trop, essayons d'y remédier !

Prenons l'exemple d'un cas concret: vous souhaitez additionner deux nombres et stocker le résultat de cette addition au sein d'une variable.

 
var a:int = 1 + 2;

Et bien dans l'exemple ci-dessus, on peut distinguer des opérateurs et des opérandes.

  • 1 et 2 sont des opérandes et l'opérateur qui agit sur eux est l'opérateur ”+”;
  • ”=” est également un opérateur et ses deux opérandes sont le résultat ( 1 + 2 ) et la variable “a”.

On peut distinguer les opérateurs en trois catégories:

  1. Les opérateurs unaires, qui ne réclament qu'un seul opérande.
  2. Les opérateurs binaires, qui réclament deux opérandes.
  3. Les opérateurs ternaires, qui réclament trois opérandes.

Ce cours n'étant pas destiné à vous apprendre les rouages les plus basiques de votre langage de programmation, nous passerons sur les explications concernant les opérateurs unaires et ternaires. Cependant, je vais vous donner un ou deux exemples pour que vous puissiez correctement vous repérer.

Exemple :

 
// Exemple d'utilisation d'un opérateur unaire.
// Ici "++" est l'opérateur unaire, il incrémente d'une unité la variabe a qui est son unique opérande.
 
var a:int = 0;
a++;
 
// Exemple d'utilisation d'un opérateur binaire.
// Ici "+" est l'opérateur binaire, il additione 1 et 2 qui sont ses deux opérandes.
 
1 + 2
 
// Exemple d'utilisation d'un opérateur ternaire.
// Ici l'expression ( condition )? résultat1 : résultat 2 nécéssite trois opérandes qui sont condition, résultat 1 et résultat 2, 
// tout le reste de l'expression constitue l'opérateur.
// Si la condition vaut true , alors l'expression retourne résultat 1, sinon elle retourne  résultat 2.
 
 
var a:int = ( true )? 1 : 2;

Maintenant que nous savons ce que sont les opérateurs nous allons pouvoir cibler directement ceux qui nous intéressent.

Les opérateurs binaires usuels .... et les opérateurs sur les bits

Dans l'exemple précédent, vous avez pu remarquer que ”+” est également un opérateur binaire. En effet, les gens ont tendance à exclure de la liste des opérateurs binaires les opérateurs classiques comme + et -, or, ceux-ci en font bel et bien partie. En fait les gens ont tendance à assimiler opérateur binaire, et connaissance de la notation en base 2 pour agir sur les bits. Or pour utiliser un + ou un -, il n'est pas nécessaire de connaître cela, en effet le langage fait les opérations sur les chaînes de bits pour vous de manière totalement transparente, de plus nous sommes habitués à utiliser ces opérateurs tous les jours et pas nécessairement en programmation.

Ce qu'il est de coutume d'appeler les opérateurs binaires, ce sont les opérateurs qui nécessitent de se plonger un petit peu plus dans la structure d'un ordinateur et par là même, d'assimiler un certain nombre de choses sur la représentation des nombres en base 2. En fait il s'agit tout bêtement des opérateurs sur les bits, ils comprennent tous les opérateurs binaires - les opérateurs arithmétiques ( comme +, - , * etc … ) plus le masque NON ”~”.

Nous allons établir sans plus tarder une liste de ces opérateurs et expliquer, au cas par cas, comment ils agissent sur nos opérandes. Si vous ne l'avez pas encore fait, je vous invite plus que jamais à lire l'article sur la représentation des nombres dans un ordinateur avant de lire la suite. Toutefois, les personnes familières avec ces notions peuvent passer directement à la suite de l'article.

L'opérateur &

Le & binaire prends tout les bits positionnés à 1 de ses deux opérandes et les compare, puissance de 2 par puissance de 2, tout les bits positionnés à 1 dans les deux nombres donnent 1, sinon ils donnent 0.

Exemple:

 
0000 0011
&
0000 0010
=
0000 0010

Dans l'exemple précédent, le 1er bit du premier opérande est positionné à 1, cependant le 1er bit du premier opérande est positionné à 0, le 1er bit du résultat sera donc 0. Le 2ème bit des deux opérandes, quand à lui, est bien positionné à 1, le 2ème bit du résultat sera donc 1.

L'opérateur |

Le | binaire retourne un résultat dans lequel tous les bits positionnés à 1 dans le premier ou le deuxième opérande sont égaux à 1.

Exemple:

 
0000 0011
&
0000 0010
=
0000 0011

Dans l'exemple précédent, le 1er bit du premier opérande est positionné à 1, cela suffit donc à ce que le 1er bit du résultat soit égal à 1.

L'opérateur ^

L'opérateur ^ binaire retourne un résultat dans lequel les bits positionnés à 1 dans le premier ou deuxième opérande, mais pas dans les deux , sont égaux à 1.

Exemple:

 
0000 0011
&
0000 0010
=
0000 0001

Dans l'exemple précédent, le 1er bit du premier opérande est positionné à 1 mais celui du deuxième opérande, le 1er bit du résultat est donc positionné à 1. En revanche le 2ème bit des deux opérandes est égal à 1, le 2ème bit du résultat est donc positionné à 0.

Le masque NON ~

L'opérateur ~ est le seul opérateur sur les bits qui ne prends qu'un opérande, il s'agit donc d'un opérateur sur bit … unaire. Il retourne un résultat dans lequel tout les bits de l'opérande sont inversés, c'est à dire que tout les bits positionnés à 1 deviennent des 0 et vice-versa.

Exemple:

 
~00000000
=
  11111111

L'opérateur >>

L'opérateur de décalage vers la droite ”»” s'écrit toujours sous la forme “opérande 1” » n, il pratique, comme son l'indique, un décalage de tout les bits de “opérande 1” n fois vers la droite. Au fur et à mesure que les bits sont “poussés”, on remplit le bit le plus à gauche nouvellement apparu, avec un 1 si le nombre est négatif ou avec un 0 si le nombre est positif.

Exemple:

 
// -2
1111 1110
>>
1
 
= 
 
//  on pousse tout les bits une fois vers la droite ce qui donne
 
// 0111 1111
 
// On voit bien qu'un bit est apparu à gauche, il est positionné à 0.
// Le signe de -2 étant négatif, on positionne le nouveau bit à 1.
// On obtient donc
 
1111 1111
// -1

On peut en conclure que décaler les bits n fois vers la droite revient à diviser par 2^n.

L'opérateur <<

L'opérateur de décalage vers la gauche ”«” s'écrit toujours sous la forme “opérande 1” « n, il pratique, comme son l'indique, un décalage de tout les bits de “opérande 1” n fois vers la gauche. Au fur et à mesure que les bits sont “poussés”, on remplit le bit le plus à droite nouvellement apparu, avec un 0 .

Exemple:

 
// -1
1111 1111
<< 
1
 
= 
 
//  on pousse tout les bits une fois vers la gauche et on positionne le bit nouvellement apparu à 0 ce qui donne:
 
1111 1110
 
// -2

On peut en conclure que décaler les bits n fois vers la gauche revient à multiplier par 2^n.

Conclusion

Voilà maintenant vous connaissez la différence entre les opérateurs binaires et les opérateurs sur bits. La différence se situe uniquement au niveau de la sémantique, sachez juste qu'en général, en parlant des opérateurs sur bits, les gens parlent d'opérateurs binaires. C'est un abus de langage communément admis. Dans le prochain chapitre, nous verrons comment créer une classe qui nous permettra de tester nos bouts de code.

En attendant, Have Fun !



Retour au sommaire du dossier
Page 1 du dossier » Pourquoi, quand et comment optimiser une application ?
Page 2 du dossier » système binaire et représentation des nombres
Page 3 du dossier » Les opérateurs binaires
Page 4 du dossier » une_classe_pour_realiser_des_benchmarks