[Tuto] Le binaire

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

[Tuto] Le binaire

#1

Message par Iste » mar. 13 mars 2012 15:16

Salutations,

J'ai noté à plusieurs reprises une certaine confusion quand on parle du binaire. Je prends donc un peu de mon temps libre pour essayer de rendre ça plus clair !
Avant toutes choses, il faut bien comprendre qu'on a le binaire, la façon de le représenter et ce qu'il veut dire.

Le binaire :

Le binaire, c'est juste une représentation de nombres en base 2. Je ne vais pas m'étendre sur le sujet, mais en gros, au lieu de donner des valeurs à l'aide de chiffres allant de 0 à 9, on utilisera pour la même valeur uniquement des 1 et des 0. Par exemple, la valeur 150 en base 10 s'écrit en binaire : 1001 0110.
On remarquera entre autres, que pour une même valeur, l'écriture en binaire est bien plus longue. Elle est également plus complexe à lire pour un humain standard.
Donc voilà, dans nos ordis, les données sont stockées en binaire.

Ses représentations :

Comme dit, le binaire est lourd et illisible.
Par exemple, prenons cette valeur en binaire :

Code : Tout sélectionner

01001001011100110111010001100101
En décimal ça nous donne

Code : Tout sélectionner

1232303205
C'est un peu mieux !
Le souci, c'est que, déjà, ça reste long, et ensuite, il faut toute la chaîne de 0 et de 1 pour avoir la valeur en décimal. Ici on a ''0100100101110011'' et ''0111010001100101'' qui valent respectivement 18803 et 29797. On ne peut donc pas découper la chaîne. Tant pis.

Mais il n'y a pas que la nature qui est bien faite, les maths aussi !
Reprenons notre valeur et représentons-la en hexadécimal (base 16)

Code : Tout sélectionner

49737465
C'est encore plus court ! Mais surtout, reprenons nos deux parties découpées tout à l'heure, '' 0100100101110011'' en hexa s'écrit ''4973'' et ''0111010001100101'' s'écrit ''7465'' !
En fait, on peut prendre chaque groupe de 4 bits pour les représenter sous un ''nombre'' en binaire de 0 à F.
En représentant le binaire en hexa, il est donc plus court et découpable ! Le top. D'autant plus qu'en informatique, on le découpe en groupe de 8 bits, les octets. On peut du coup, représenter chaque octet en deux chiffres allant de 0 à F.

Donc quand on demande du binaire, on se retrouve avec de l'hexa. C'est normal, car ce qui nous intéresse n'est pas une représentation binaire, mais juste sa valeur ! L'hexa est tellement pratique qu'il n'y a presque aucune raison de passer par des valeurs en binaire !

La signification :

Pour finir, maintenant qu'on a bien compris qu'une chaîne de 0 et de 1 qui sont regroupables en paquets de 8 et représentables sous la forme de deux chiffres hexa, il ne reste plus qu'à savoir ce que veulent dire ces bits !
Et là, bah tout dépend de l'application. On peut décider que chaque groupe de 8 représente un caractère dans une grille de 256. Ou en utiliser deux pour avoir un choix de 65536... Ça c'est le rôle de l'encodage. On peut également décider de stocker des valeurs, ou n'importe quoi d'autre !

Pour résumer :

- Le binaire est sous forme de 0 et de 1 dans la machine (que ce soit sur DD ou flash ou réseau).
- On le représente en hexa pour le lire ou l'écrire.
- Il peut vouloir dire tout ce qu'on veut.

À savoir, pour écrire une valeur hexa en AutoIt, il suffit de rajouter ''0x'' à gauche. Par exemple

Code : Tout sélectionner

$var = 0x49737465
Voilà, j’espère que ça sera plus clair pour tout le monde.
Modifié en dernier par Iste le mar. 13 mars 2012 21:03, modifié 1 fois.
Raison : correction des fautes (il en reste ?)
Signez ici

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [Tuto] Le binaire

#2

Message par DimVar » mar. 13 mars 2012 15:50

Bonjour,

Merci pour ce petit cours (et pour les fautes ^^).

1°)
Si je fais ça :
$i = BinaryToString (01001001011100110111010001100101)
ConsoleWrite ($i)

Ça ne renvoi pas 1232303205 ni sa valeur en hexa... Qu'est ce que je n'ai pas compris ?

2°)
Peux tu nous expliquer ça autrement ?
"Ou en utiliser deux pour avoir un choix de 65536... Ça c'est le rôle de l'encodage"


Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Tuto] Le binaire

#3

Message par Iste » mar. 13 mars 2012 16:17

Les faute vont s'envoler d'ici 24h ;)

Code : Tout sélectionner

$i = BinaryToString (01001001011100110111010001100101)
ConsoleWrite ($i)
Bah zut ! C'est justement pour éviter ca que j'ai fait de topic, c'est raté !

En AutoIt quand tu écrit un nombre, il est en décimal par défaut, ou en hexa si on ajoute un 0x devant.
Donc la, on va essayer de convertir la valeur du nombre 1001001011100110111010001100101 décimal, qui vaut en binaire un truc du genre 1100101000100110100010100001001010001011111100001101100000000000000000000000000000000000000000000000... (pas trouvé de convertisseur capable de me donner la bonne valeur !)
La chaine ''01001001011100110111010001100101'' utilisé dans mes exemple, c'est du binaire, et dans du code au3, on a jamais de binaire ! Que de l'hexa, qui représente la valeur binaire.

Et normal que ca retourne pas 1232303205, ca c'est sa représentation en décimal. La le code demande sa signification en texte...

Pour etre claire, il faut bien distinguer la valeur d'un nombre de sa représentation.
Par exemple, ici j'ai 5 pommes :
Image
"5", c'est comme ca qu'on le représente en décimal.
"V", en chiffres romains.
"101", en binaire.
"cinq" en français.
ou même "five", en anglais !
Dans tout les cas, on a une représentation du nombre de pomme.

Ici c'est pareil, sur notre disque on a des 0 et des 1 qui forment des nombre.
On les regroupe par lot de 8, et on a donc pour chaque octet une valeur.
Elle est représenté en binaire sur l'ordi (enfin, c'est même des petits machin d’électronique en fait), mais quand on va afficher ça a l'utilisateur, on va lui donner en hexa. Tout comme vous voyez au dessus mes 5 pommes, et non pas le code couleurs de chaque pixel !

Pour le 2), bah c'est pour dire qu'une foi qu'on a récupérer notre lot de valeurs, ça peut vouloir dire tout ce que l'on décide. Je peux dire par exemple que chaque octet contient une lettre avec a = 0, b = 1 etc, et pour écrire "Iste", il nous faut donc les valeurs 9, 19, 20 et 5. Soit en binaire 1001, 10011, 10100 et 101
Nos octets seront donc rempli ainsi :
0000 1001
0001 0011
0001 0100
0000 0101

Ça c'est juste pour dire que le binaire ne stocke que des valeur, et que c'est aux logiciel de décider et de savoir ce qu'elles signifies.
Signez ici

Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1564
Enregistré le : lun. 18 avr. 2011 14:21
Localisation : La Quatrième Dimension
Contact :
Status : Hors ligne

Re: [Tuto] Le binaire

#4

Message par TT22 » mar. 13 mars 2012 18:55

Je trouve ce tutoriel très bien fait :wink:
Il résume assez bien les différents aspects du binaire.

J'ai fait un petit convertisseur Binaire vers Hexadécimal et inversement...
► Afficher le texte
Edit :
Iste a écrit :(pas trouvé de convertisseur capable de me donner la bonne valeur !)
Le mien il peut :P
Ça donne :
► Afficher le texte
TT22
[/b][/size]
Image

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Tuto] Le binaire

#5

Message par Iste » mar. 13 mars 2012 18:57

@TT22 : merci, j'ai eu peur d'avoir tapé dans le vent ^^

En fait la confusion principal vient du faire que l'on dit "binaire" pour les donné brut que l'on reçoit, mais on peut très bien les recevoir en hexa, et au final ne jamais passer par le binaire...
des donnés binaires <> des donnés en binaires :/
Signez ici

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [Tuto] Le binaire

#6

Message par DimVar » mar. 13 mars 2012 20:39

Merci pour la réponse. Le brouillard commence à se dissiper. (mais il est encore là)

Si, comme tu le dis, "des donnés binaires <> des donnés en binaires", peux tu me créer 2 fichiers (ou les joindre au 1er post), l'un en binaire, l'autre en hexa, histoire de m'entrainer avec qq fonctions pour saisir le sens.
Et dans ce cas, le fichier hexa contiendra :
- "des donnés binaires" ?
Ou
- "des donnés en binaires " ? :D



En tout cas, merci, car pour qqun qui a séché les cours un peu tôt, ton aide sur ce sujet est précieuse.
Image
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Tuto] Le binaire

#7

Message par Iste » mar. 13 mars 2012 20:54

Nan j'peux pas vous donner un fichier ecrit en hexa :o
Justement c'est ce que j'essaye d'expliquer.
Un fichier c'est une suite de valeurs allant de 0 a 255 (les octets)
Sur des ordi conventionnels ils sont stockés en binaire.
Mais si j'ai envie de faire passer les même valeurs à un collègue par msn par exemple, je lui enverrai en hexa pour que ça prenne moins de place !

Ce que je dis, c'est que si on parle des donné "binaire" c'est que en général on stock ces valeurs sous forme de 0 et de 1. Mais au final, ça reste juste des valeurs, qui peuvent être représenter sous toute les formes voulu.
Signez ici

Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1564
Enregistré le : lun. 18 avr. 2011 14:21
Localisation : La Quatrième Dimension
Contact :
Status : Hors ligne

Re: [Tuto] Le binaire

#8

Message par TT22 » mar. 13 mars 2012 21:16

Peut-être que ceci sera plus clair :

Un caractère ou octet (par exemple ceux qu'on voit dans le bloc-notes) est en fait une suite de 8 bits (des 0 et 1) que l'ordinateur peut interpréter.
Le bloc-notes lis ces 0 et 1 en fonctions d'une table de caractère (UTF8, ASCII, ...) qui dit à quoi ces huit 0 et 1 correspondent.
Mais par exemple, pour une image ça peut être la couleur d'un pixel.

Et la représentation hexadécimale, c'est une façon d'écrire du binaire avec des caractères, de cette façon :
► Afficher le texte
De cette façon, ton 01001001011100110111010001100101 en binaire s'écrit 49737465 en hexadécimal.
Et donc un octet a une représentation hexadécimal à deux caractère (4 + 4 = 8 ).


PS : @Iste :
Iste a écrit :je lui enverrai en hexa pour que ça prenne moins de place !
En fait, ce n'est pas tout à fait vrai, par exemple, j'ai le caractère 3 a envoyé, son binaire est 00000011 et donc son hexa est 03.
Et le binaire de 03, c'est 0000000000000011.
Ce qui double la taille :P
Sauf si tu disais envoyer du binaire sous forme de caractères, dans ce cas là je suis tout à fait d'accord :wink:
Car le binaire des caractères 00000011 c'est 00000000000000000000000000010001, au quel cas l'hexa devient moins volumineux.
Mais bon, là je vais un peut chercher la petite bête :roll:
TT22
[/b][/size]
Image

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Tuto] Le binaire

#9

Message par Iste » mar. 13 mars 2012 21:26

TT22 a écrit :En fait, ce n'est pas tout à fait vrai, par exemple bla bla bla
Vi, je parlais bien de ne pas envoyer le binaire en chaine, car la... On envoi du binaire qui correspond a du texte qui est la représentation du binaire que je souhaite envoyer... aie !
Donc on pourrait tasser encore plus en utilisant une représentation base 36 (0 a z) voir plus si on prend en compte tout les caractères prit en compte par msn, mais c'est pour l'exemple ^^

Un exemple concret d'utilisation de l'hexa dans la vie de "tout les jour" c'est pour les couleur. En binaire c'est moche, en décimal illisible, en hexa c'est court et claire !
► Afficher le texte
Signez ici

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1787
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: [Tuto] Le binaire

#10

Message par TommyDDR » mer. 14 mars 2012 09:34

DimVar a écrit :peux tu me créer 2 fichiers (ou les joindre au 1er post), l'un en binaire, l'autre en hexa
Ceci est impossible, les données seront TOUJOURS stocké en binaire sur votre disque dur, c'est quand vous ouvrez votre fichier que le programme décide de vous afficher les données de tel ou tel manière.

Les données EN binaires ne sont qu'une représentation de la donnée.
la donnée binaire 0x544553542E(Hexa) = 361940341806(décimal) = 101010001000101010100110101010000101110 (Binaire)
Sera la plus part du temps traduite par un éditeur par "TEST."
0x54 = T
0x45 = E
0x53 = S
0x54 = T
0x2E = .
Je vous conseille de regarder ceci : http://www.asciitable.com/index/asciifull.gif

Vous pouvez aussi lire des infos sur le net à propos du binaire (entre autre, "pourquoi tout stocker en binaire")
Pour amorcer la réponse, le stockage est fait en binaire cas sur les supports de stockage, une "case mémoire" ne peut avoir que 2 états (sur un disque dur magnétique, c'est le sens du champ qui fait que le bit est à 0 ou 1)
Les données ne peuvent donc n'être stockés qu'en binaire.

Sur ce, je te souhaite beaucoup de courage Iste pour les futures questions qui te seront posés :P
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2046
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : En ligne

Re: [Tuto] Le binaire

#11

Message par jchd » mer. 14 mars 2012 11:13

Moi aussi, je te souhaite un solide clavier pour répondre aux futures interrogations...

Ceci dit, une autre exposition est possible et éclairera peut-être la lanterne de quelques un(e)s.

Les données sont les données, elles sont invariables dans ce qui suit, que ce soit en mémoire, sur disque, sur réseau, etc.

Seule change la paire de lunettes qu'on utilise pour les observer et donc la vision qu'on en a.

Si on prend la paire de lunette "binaire", ov voit une suite ininterrompue de 0 et de 1(les bits ou binary digits). Par commodité et du fait de l'architecture typique de machines type PC, on les groupe souvent par paquets de 4 (quartet ou nibble), de 8 (octet ou byte), de 16 (demi-mot ou half-word), de 32 (mot ou word) ou de 64 (double-mot ou double-word).

Si on prend la paire de lunettes "hexadécimal", on voit une suite ininterrompue de 0..9A..F. Chaque symbole code quatre bits. Par l'habitude déjà citée, on les groupe par 2, 4, 8 ou 16.

Si on prend la paire de lunettes "texte" on doit choisir les verres clairs (ASCII tout bête), teintés (ANSI selon page de code) ou à multiple foyers (Unicode et là il y a plusieurs possibilités selon l'encodage des données : UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE).

Il existe de nombreuses variantes (octal, décimal, etc.) qui importent peu ici.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [Tuto] Le binaire

#12

Message par DimVar » mer. 26 juin 2013 09:24

Comme je repasse ici souvent :mrgreen: pour m’éclairer le cerveau sur les représentations, j'en profite pour remercier les acteurs de ce topic.
J’envoie même ici, des users qui me posent des questions existentielles sur la représentation binaire...

Merci.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Répondre