1.17k likes | 1.61k Views
Cours 2. 2. Représentation et traitement des informations Systèmes de numération et représentation des nombres (entiers) Arithmétique binaire sur les entiers Le matériel Chapitre 2 de CS et CSA Synthèse du professeur. Conversion des données et représentation. Computer
E N D
Cours 2 • 2. Représentation et traitement des informations • Systèmes de numération et représentation des nombres (entiers) • Arithmétique binaire sur les entiers • Le matériel • Chapitre 2 de CS et CSA • Synthèse du professeur sif-1053
Conversion des données et représentation Computer 1101000101010101… Input device A 1+2=3 math Code ASCII Code binaire sif-1053
Formats de données • Ordinateurs • Traitent des données exclusivement sous forme binaire • Communication humaine • Sous forme du language, d’images et de sons • Formats des données: • Spécifications pour convertir les données dans un format utilisable par l’ordinateur • Définit les différentes approches prises pour représenter, stocker et traiter par ordinateur les données humaines sif-1053
Source des données • Input binaire • Input de données discrètes (ex: suite caractères) • Example: Input au clavier A 1+2=3 math • Le clavier génère un code binaire pour chaque touche • Input analogique • Données continues comme le son et l’image • Requiert des convertisseurs A/D pour convertir ces données en format binaire sif-1053
Représentation de données communes sif-1053
Exemple de format (.wav) Échantillonnage typique: 44.1KHz Amplitude: 8 bits ou 16 bits ou 2 X16 bits (stéréo) sif-1053
Le système décimal Pourquoi les ordinateurs ne fonctionnent pas en base 10 ? Représentation des nombres en base 10 Basé sur les dix doigts des mains (digits) Représentation naturelle pour les transactions financières difficile de représenter $1.20 en point flottant Facile d’utilisation en notation scientifique 1.5213 X 104 Implémentation électronique Difficile à emmagasiner Difficile à transmettre Difficile de construire des circuits avec des logiques à 10 niveaux sif-1053
Le système décimal Le système décimal est le système de numération le plus communément répandu dans notre monde. Il est fondé sur l'utilisation de 10 caractères différents qui représentent les valeurs de nombres. Généralement un système de numération nous indique, de par son appellation, le nombre de caractères différents sur lesquels il est fondé. Les dix caractères du système décimal sont: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , et 9 sif-1053
En utilisant une notation fondée sur les puissances successives de 10, on peut représenter le poids de la première colonne d’un nombre sous la forme 100, celui de la seconde, 101, celui de la troisième, 102, etc. On remarque ainsi que le poids de chaque colonne s'exprime par la base élevée à une certaine puissance qui n'est autre que la position de la colonne. Ainsi le nombre 6321 correspond à 103 102 101 100 6 3 2 1 sif-1053
L'évaluation que nous obtenons à partir de cette représentation s'obtient de la manière suivante: 6x103 + 3x102 + 2x101 + 1x100 = 6321 sif-1053
Nous pouvons aussi représenter des nombres réels ayant une partie entière et une fractionnaire. Ainsi le nombre 6321. 564 correspond à 103 102 101 100 10-1 10-2 10-3 6 3 2 1 . 5 6 4 sif-1053
L'évaluation que nous obtenons à partir de cette représentation s'obtient alors de la manière suivante: 6x103 + 3x102 + 2x101 + 1x100 + 5x10-1 + 6x10-2 + 4x10-3 = 6321.564 sif-1053
Le système binaire (Pourquoi ???) Les premiers ordinateurs fonctionnaient en décimal Mark I et le ENIAC John Von Neumann propose le traitement des données en binaire (1945) Simplification du design des ordinateurs Permet de représenter autant les données que les instructions Relation naturelle entre la notion d’interrupteur on/off et les opérations en logique Booléenne sif-1053
Le système binaire 0 1 0 3.3V 2.8V 0.5V 0.0V • Représentation des nombres en base 2 • 1521310 => 111011011011012 • 1.2010 => 1.0011001100110011[0011]…2 • 1.5213 X 104 => 1.11011011011012 X 213 • Implémentation électronique • Facile à emmagasiner dans des circuits bistables • Transmission plus fiable sur des liens bruités • Implémentation directe des opérations arithmétiques sif-1053
Le système binaire • A de nombreux égards, le système binaire est plus simple que le système décimal. Le système binaire ne comporte que deux caractères et il est utilisé en électronique numérique parce que les circuits ne peuvent prendre que deux états. Le plus souvent, on utilise les caractères 0 et 1. • Évaluons un nombre binaire afin de trouver sa valeur dans le système décimal, 1011012 1x25+0x24+1x23+1x22+0x21+1x20 = 4510 sif-1053
Le système binaire • Forme générale de la conversion binaire-décimale (partie entière) an-1x2n-1+an-2x2n-2+….+a2x22+a1x21+a0x20 = N10 sif-1053
Le système binaire • Nous pouvons aussi rencontrer des nombre binaire réels • Évaluons un nombre binaire réel afin de trouver sa valeur dans le système décimal, 101101 . 0112 1x25+0x24+1x23+1x22+0x21+1x20 0x2-1+1x2-2+1x2-3 = 45. 37510 • Forme générale de la conversion binaire-décimale (partie fractionnaire) a-1x2-1+a-2x2-2+….+a-m+1x2-m+1+a-mx2-m = M10 sif-1053
Le système binaire • Les puissances de 2 212 = 4096 2-1 = 0.5 211 = 2048 2-2 = 0.25 210 = 1024 2-3 = 0.125 29 = 512 2-4 = 0.0625 28 = 256 2-5 = 0.03125 27 = 128 2-6 = 0.015625 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1 sif-1053
Dans le système décimal chaque position porte le nom de chiffre ou, plus précisément, de chiffre décimal. Dans le cas du système binaire, le nom attribué à chaque position est bit (ce terme provient de binary digit). • En traitant des nombres binaires, les termes BLMS (bit le moins significatif) et BLPS (bit le plus significatif) reviennent souvent. Il s'agit là de formes qui sont analogues à celles que l'on utilise dans le langage décimal où l'on parle de chiffres le plus, ou le moins, significatifs. Le BLPS est donc le bit le plus à gauche. sif-1053
Conversion binaire-décimal • La procédure de conversion est simple: il suffit d'additionner entre eux les poids de tous les bits qui ont 1 pour valeur. • Convertir le nombre binaire 1100 1100 en décimal 1 1 0 0 1 1 0 0 20= 0 21 = 0 22 = 4 23= 8 24 = 0 25 = 0 26= 64 27= 128 1100 11002 = 20410 sif-1053
Conversion décimal-binaire 5710 = ?2 Division Reste 57/2 = 28 1 BLMS 28/2 = 14 0 14/2 = 7 0 7/2 = 3 1 3/2 = 1 1 1/2 = 0 1 BLPS D'où 5710 = 1110012 sif-1053
Conversion décimal-binaire (Justification) • La conversion décimale-binaire entière est une succession de divisions entières par 2 • Étape 1 N=an-1x2n-1+an-2x2n-2+….+a2x22+a1x21+a0x20 N=(an-1x2n-2+an-2x2n-3+….+a2x21+a1)X2+a0 N1(quotient) (reste) } } sif-1053
Conversion décimal-binaire (Justification) • La conversion décimale-binaire entière est une succession de divisions entières par 2 • Étape 2 N1=(an-1x2n-3+an-2x2n-4+….+a2)X2+a1 N2(quotient) (reste) } } sif-1053
Conversion décimal-binaire 0.3437510 = ?2 Multiplication Partie entière 2 x 0.34375 = 0.6875 0 BLPS 2 x 0.6875 = 1.375 1 2 x 0.375 = 0.75 0 2 x 0.75 = 1.5 1 2 x 0.5 = 1.0 1 2 x 0 = 0 0 BLMS D'où 0.3437510 = 0.010112 sif-1053
Conversion décimal-binaire (Justification) • La conversion décimale-binaire fractionnaire est une succession de multiplications par 2 • Étape 1 M = a-1x2-1+a-2x2-2+….+a-m+1x2-m+1+a-mx2-m 2*M = a-1+(a-2x2-1+….+a-m+1x2-m+2+ a-mx2-m+1) partie entière M1 } } sif-1053
Conversion décimal-binaire (Justification) • La conversion décimale-binaire fractionnaire est une succession de multiplications par 2 • Étape 2 2*M1= a-2+(a-3x2-1+….+a-m+1x2-m+3+ a-mx2-m+2) partie entière M2 } } sif-1053
Le système octal • Comme son nom l'indique le système octal est un système de numération à base 8. Ce système est construit sur 8 chiffres différents qui sont les caractères 0, 1, 2, 3, 4, 5, 6, et 7. • Nous savons qu'il n'existe pas de système électronique qui utilise huit états différents de la manière dont l'électronique numérique s'organise autour de deux états. Ce système n'est donc pas une nécessité, il constitue simplement un moyen commode pour exprimer les nombres binaires. sif-1053
Huit, comme nous le savons, est la troisième puissance de deux, soit 8 = 23. Il en résulte que chacun des huit caractères du système octal (0 à 7) peut être représenté par un nombre binaire de 3 bits de longueur. Les nombres binaires de 3 bits vont de 000 à 111. sif-1053
Pour écrire un nombre binaire sous sa forme en octal, il suffit de grouper les bits trois par trois, en partant du bit le moins significatif (BLMS), puis de convertir chaque groupe de trois en leur équivalent octal. Par exemple, pour convertir le nombre binaire 10101011111101 en octal, nous partons du BLMS et nous groupons les caractères trois par trois: 010 101 011 111 101 sif-1053
Nous remplaçons maintenant chaque groupe de trois par le chiffre équivalent en octal: 010 101 011 111 101 2 5 3 7 5 et, par conséquent, 101010111111012 est égal à 25 3758 sif-1053
Le système hexadécimal • Une fois introduit le système octal, le système hexadécimal apparaît à la fois simple et évident. Il s'appuie sur seize caractères différents et l'usage conventionnel a conduit au choix des caractères: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, et F. • 16 est la puissance quatrième de 2 (soit 16=24). Il en résulte qu'un caractère hexadécimal peut servir de notation abrégée à un nombre binaire de 4 bits. sif-1053
Soit 10101011111101 le nombre binaire à convertir, l'opération de groupage donne: 0010 1010 1111 1101 • Remarquer que, comme précédemment, on ajoute des 0 non significatifs de manière à constituer des groupes de 4 bits. Et le remplacement des groupes de 4 bits par leur équivalent hexa conduit à: 2 A F D et 101010111111012 = 2AFD16 sif-1053
Le système hexadécimal présente un avantage particulier sur le système octal. En effet, la majorité des ordinateurs utilisent des mots de 8, 16, 32 ou 64 bits, ce qui signifie que les machines utilisent des mots dont la longueur est un multiple de 4 bits. • Mais souvenez-vous toujours que ces deux notations, octale et hexa, ne sont que des manières commodes d'écrire des nombres binaires. L'ordinateur travaille sur des nombres binaires, pas des nombres en octal ou hexadécimal. sif-1053
Codage des octets Decimal Binary Hex 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 • Octet => 8 bits • Binaire: 000000002 à 111111112 • Décimal: 010 à 25510 • Hexadécimal: 0016 à FF16 sif-1053
Représentation des caractères (ASCII) 7416 0111 0100 sif-1053
Mots machine (words) • Mot machine => dimension des registres internes • Dimension de base des entiers • Incluant les adresses • Machines usuelles à 32 bits (4 octets) • Plage d’adresses limitée à 4GB • Trop petit pour les applications gourmandes en mémoire • Machines puissantes à 64 bits (8 octets) • Plage d’adresses 1.8 X 1019 bytes • Machines supportent des formats de données multiples • Fractions ou multiples de mots machines • Nombre entier d’octets sif-1053
Organisation de la mémoire en mots • Les adresses spécifient la localisation de chaque octet d’information dans la mémoire • Pour localiser un mot d’information de 32 bits ou 64 bits il faut spécifier l’adresse du premier octet composant le mot recherché • Les adresses de mots successifs diffèrent de 4 (32-bit) ou 8 (64-bit) octets sif-1053
Organisation de la mémoire en mots 64-bit Words 32-bit Words Bytes Addr. 0000 Addr = 0000 0001 0002 Addr = 0000 0003 0004 Addr = 0004 0005 0006 0007 0008 Addr = 0008 0009 0010 Addr = 0008 0011 0012 Addr = 0012 0013 0014 0015 sif-1053
Représentations des données • Dimensions des objets en C (Octets) C Data Type Compaq Alpha Typical 32-bit Intel (IA32) int 4 4 4 long int 8 4 4 char 1 1 1 short 2 2 2 float 4 4 4 double 8 8 8 long double 8 8 10/12 char * 8 4 4 • Ou pour tout autre pointeur sif-1053
Représentations des données • Dimensions des objets en C (Octets) machine 64 bits sif-1053
Ordre des octets • Question importante ??? • Comment les octets d’un mot sont-ils ordonnés en mémoire ? • Conventions • Alphas, PC’s sont “Little Endian” • Octet le moins significatif associé à l’adresse la plus basse • Sun’s, Mac’s sont “Big Endian” • Octet le moins significatif associé à l’adresse la plus haute • Exemple • Une variable x à une représentation sur 4 octets 0x01234567 • L’adresse est donnée en langage C par l’opération unaire &x est 0x100 sif-1053
Ordre des octets 0x100 0x100 0x101 0x101 0x102 0x102 0x103 0x103 67 01 23 45 45 23 67 01 Big Endian Little Endian sif-1053
Observation des représentations de données • Code C pour imprimer la représentation des octets composants un objet quelconque • La conversion d’un type à un type unsigned char * crée un vecteur d’octet typedef unsigned char *pointer; void show_bytes(pointer start, int len) { int i; for (i = 0; i < len; i++) printf("0x%p\t0x%.2x\n", start+i, start[i]); printf("\n"); } • Directives du printf(): • %p: impression d’un pointeur • %x: impression en hexa sif-1053
show_bytes Exemple d’exécution #include <stdio.h> void show_bytes(pointer start, int len); void main() { int a = 15213; printf("int a = 15213;\n"); show_bytes((pointer) &a, sizeof(int)); } Opérateur unaire donnant une adresse Opérateur unaire donnant la dimension d’un objet en octet Résultats: int a = 15213; 0x11ffffcb8 0x6d 0x11ffffcb9 0x3b 0x11ffffcba 0x00 0x11ffffcbb 0x00 sif-1053
Notions de programmation en langage C • Structure générale d’un programme C inclusion des fichiers en-tête (.h); déclaration des constantes; déclaration des types; déclaration de variables globales; définition des fonctions et procédures; fonction principal (main); sif-1053
Notions de programmation en langage C • Inclusion des fichiers en-têtes (.h) • Permet d’inclure (#include) lors de la phase de précompilation d’un programme source, le contenu d’un fichier d’en-tête • Les fichiers d’en-tête peuvent contenir des directives de précompilation (ex: #define, #include), des définitions de types, des définitions de structure, et des prototypes de fonctions • En langage C il existe un certain nombre de fichiers d’en-tête standard qui sont inclus par des directives de la forme: • #include <stdio.h> /* prototype des fonctions d’I/O */ • #include <math.h> /* prototype des fonctions mathématiques */ • #include <string.h> /* prototype des fonctions de traitement de chaînes de caractères */ sif-1053
Notions de programmation en langage C • Déclaration des constantes • Permet la substitution d’une chaîne de caractères quelconque dans le code source d’un programme lors de la phase de précompilation • Par exemple: #define SURFACE 2337 #define VRAI 1 #define FAUX 0 #define DIM 1024 • Déclaration des types • Permet de définir un nouveau type Par exemple: typedef unsigned char pixel; typedef unsigned char *pointeur; pixel image[1024][1024]; pixel image[DIM][DIM]; sif-1053
Notions de programmation en langage C • Déclaration des fonctions et procédures • Permet de déclarer une fonction • Type de l’objet retourné • Nom de la fonction • Type et nom des arguments • Représente l’en-tête de la fonction Par exemple: void show_bytes(pointer start, int len) • Fonctions et passage de paramètres • En langage C, nous pouvons passer des informations aux fonctions via son interface et ce de deux façons distinctes: • Passage par valeur: valeurs actuelles sont passées • Passage par référence (adresse): pointeurs sont passés sif-1053
Notions de programmation en langage C • Les pointeurs ptr 0 1 2 3 4 5 6 7 char *ptr; char car; ptr = (unsigned char *) malloc(8); car = ptr[1]; car = *(ptr+1); sif-1053
L'arithmétique binaire • Nous allons, tout d'abord, revoir l'addition et la soustraction décimales parce que l'arithmétique binaire ressemble beaucoup à l'arithmétique décimale. • En second lieu, l'on étudie comment l'ordinateur exprime les nombres binaires positifs et négatifs, et nous introduisons un système connu sous le nom de l'arithmétique selon la notation du complément à 2. • L'on passe ensuite à la multiplication et à la division binaires pour constater que la multiplication n'est qu'une suite d'additions, la division n'étant qu'une suite de soustractions. sif-1053