”Ce monde est un code binaire où nous avons seulement deux options : accepter ou refuser.”
Ardit BEQIRI
Lorsque l’on parle d’ordinateur on dit très souvent que ce n’est qu’un outil qui traite des 0 et 1, et ce n’est pas faux. Si l’on résume un ordinateur à de l’électronique, effectivement la mémoire, le processeur, les périphériques peuvent se résumer à des suites binaires, donc des suites de 0 et de 1.
Mais c’est comme dire que le cerveau n’est qu’un imbroglio de neurones, c’est réducteur. La complexité du système est tel que l’on peut oublier qu’à la base c’est un système binaire, du reste un utilisateur d’ordinateur n’a même pas à savoir comment cela fonctionne, et même un programmeur n’a pas toujours à le savoir.
Cependant, tous les langages informatiques comprennent une partie binaire. Et donc la compréhension du binaire est essentielle à un moment ou à un autre. En fait il y a plusieurs sujets interconnectés, la logique binaire, les opérations binaires, les nombres binaires, etc.
La logique binaire
La logique binaire est une branche des mathématiques appelée l’algèbre de Boole. L’idée est d’étudier un algèbre (permettant de faire des calculs) reposant sur des propositions vraies ou fausses de façon à prendre des décisions.
L’algèbre de Boole définit ensuite des lois définissant des opérateurs.
Ainsi la loi de conjonction (ET) dit : ”a ET b est VRAI si et seulement si a est VRAI et b est VRAI”. On utilise le signe ⋀ comme opérateur.
Ainsi, dans la vie de tous les jours, je pourrais dire que si j’ai une voiture ET de l’essence je peux prendre la route.
La loi de disjonction (OU) dit : ”a OU b est VRAI si et seulement si a est VRAI ou b est VRAI”. On utilise le signe ⋁ comme opérateur.
Dans la vie de tous les jours, je pourrais dire que si j’ai une voiture OU une moto je peux voyager.
La loi de négation dit : "a est VRAIE si et seulement si a est FAUX”. Il s’agit simplement d’une inversion de la proposition. On note la négation en utilisant une barre au-dessus de la proposition.
Dans la vie de tous les jours, on dirait que je peux me reposer si je n’ai PAS de travail à finir.
La loi de disjonction exclusive (XOR) dit : ”a XOR b est VRAI si et seulement si a est VRAI ou b est VRAI mais pas les deux”. On utilise le signe ⨁ comme opérateur.
Dans la vie de tous les jours, on pourrait dire ”Je vais prendre la voiture OU la moto pour partir en vacances.”. La langue française ne fait pas la différence entre le ou inclusif (OU) et le ou exclusif (XOR).
Cette façon de penser les propositions est très utilisé en informatique, la notation diffère d’un langage à l’autre, mais l’esprit reste.
Les tests
À la base d’un processeur il y a des portes logiques, c’est à dire des éléments électroniques agissant comme un opérateur de l’algèbre de Boole. Une porte logique s’applique à une ou deux propositions (représentées par des bits).
- La porte NOT inverse la valeur, ainsi le 0 devient un 1, et le 1 devient un 0. C’est l’équivalent de la négation en algèbre de Boole.
- La porte OR est un ”ou inclusif”. Elle prend deux bits en entrée et si un des deux bits est à 1 elle renvoie 1, sinon elle renvoie 0. C’est l’équivalent de la disjonction inclusive en algèbre de Boole.
- La porte AND est un ”et”. Elle prend deux bits en entrée et si les deux bits sont à 1 elle renvoie 1. C’est l’équivalent de la conjonction en algèbre de Boole.
Les trois portes ne sont pas notées de la même façon selon les langages mais il y a en réalité deux grandes notations, celle qui vient du Basic et celle qui vient du C. Voici un tableau non-exhaustif montrant les différentes façons de faire.
Langage |
NOT |
ET |
OU inclusif |
Basic, LISP, Python, LOGO, Pascal, PHP, Forth, Ruby |
NOT |
AND |
OR |
C, C#, C++, Objective-C, JavaScript |
! |
&& |
|| |
Perl, Ocaml |
!, not |
&&, and |
||, or |
Prolog |
\ |
/\ |
\/ |
Remarque: Ce tableau n’a évidemment rien d’exhaustif. Il existe des milliers de langages mais ce qu’il faut remarquer c’est la constance des opérations de base.
Prenons un exemple pour que cela soit plus parlant. Nous avons une voiture ou une moto et de l’essence à mettre dedans pour partir en vacances. En français nous dirions :
Je partirai en vacances si j’ai une voiture ou une moto et de l’essence à mettre dedans.
En Basic moderne nous écririons :
IF ( VOITURE OR MOTO ) AND ESSENCE THEN
GOTO VACANCES
ENDIF
En C, nous écririons :
if( ( VOITURE || MOTO ) && ESSENCE ) {
partir_en_vacance( );
}
En Perl, nous écririons :
partir_en_vacance if( (VOITURE or MOTO) && ESSENCE );
On le voit, l’idée est la même, la syntaxe diffère. La plupart du temps il ne faut pas avoir peur d’un nouveau langage car presque tout ce que vous avez appris dans un autre langage est transposable, ou en tout cas l’essentiel.
Les grandes difficultés dans l’apprentissage d’un langage sont souvent concentrées dans le premier même si les spécificités de chaque langage demandent un effort supplémentaire. Mais les habitudes sont tenaces et lorsque l’on en a pris on a du mal à en sortir. Certains ne supportent pas python à cause de son organisation avec des tabulations, d’autres ne supportent pas le C avec ses points-virgules qui termine une fonction, d’autres encore ne supportent pas Java et ses trop nombreux fichiers, etc.
On le voit, les problèmes sont souvent liés à la forme et pas au fond. Il faudrait être capable de faire abstraction de la forme lorsque l’on choisit un langage, mais nous sommes humains.
Commentaires