Cours 2 2. Représentation et traitement des informations Le matériel 28/08/2018 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 28/08/2018 Computer 1101000101010101… Input device A 1+2=3 math Code ASCII Code binaire sif-1053
Formats de données Ordinateurs Communication humaine 28/08/2018 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 analogique 28/08/2018 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 28/08/2018 Type de données Standard(s) Alphanumérique Unicode, ASCII, EDCDIC Image (bitmapped) GIF (graphical image format) TIF (tagged image file format) PNG (portable network graphics) Image (vectorisée) PostScript, JPEG, SWF (Macromedia Flash), SVG Graphiques et fonts PostScript, TrueType Son WAV, AVI, MP3, MIDI, WMA Description de Page PDF (Adobe Portable Document Format), HTML, XML Vidéo Quicktime, MPEG-2, RealVideo, WMV sif-1053
Exemple de format (.wav) 28/08/2018 Échantillonnage typique: 44.1KHz Amplitude: 8 bits ou 16 bits ou 2 X16 bits (stéréo) sif-1053
Le système décimal 28/08/2018 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 28/08/2018 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
Ainsi le nombre 6321 correspond à 103 102 101 100 6 3 2 1 28/08/2018 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
28/08/2018 L'évaluation que nous obtenons à partir de cette représentation s'obtient de la manière suivante: 6x103 + 3x102 + 2x101 + 1x100 = 6321 sif-1053
Ainsi le nombre 6321. 564 correspond à 103 102 101 100 10-1 10-2 10-3 28/08/2018 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
28/08/2018 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 ???) 28/08/2018 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 On Off True False Yes No 1 sif-1053
Le système binaire Représentation des nombres en base 2 28/08/2018 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 0.0V 0.5V 2.8V 3.3V 1 sif-1053
Le système binaire 28/08/2018 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
an-1x2n-1+an-2x2n-2+….+a2x22+a1x21+a0x20 = N10 Le système binaire 28/08/2018 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
a-1x2-1+a-2x2-2+….+a-m+1x2-m+1+a-mx2-m = M10 Le système binaire 28/08/2018 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 28/08/2018 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
28/08/2018 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 28/08/2018 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 28/08/2018 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) 28/08/2018 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) 28/08/2018 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 28/08/2018 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) 28/08/2018 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) 28/08/2018 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 28/08/2018 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
28/08/2018 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
28/08/2018 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
28/08/2018 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 28/08/2018 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
28/08/2018 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
28/08/2018 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 Binaire: 000000002 à 111111112 Décimal: 010 à 25510 28/08/2018 Octet => 8 bits Binaire: 000000002 à 111111112 Décimal: 010 à 25510 Hexadécimal: 0016 à FF16 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 Hex Decimal Binary sif-1053
Représentation des caractères (ASCII, 7 bits) 28/08/2018 Représentation des caractères (ASCII, 7 bits) MSD LSD 1 2 3 4 5 6 7 NUL DLE SP @ P p SOH DC1 ! A Q a W STX DC2 “ B R b r ETX DC3 # C S c s EOT DC4 $ D T d t ENQ NAK % E U e u ACJ SYN & F V f v BEL ETB ‘ G g w 8 BS CAN ( H X h x 9 HT EM ) I Y i y LF SUB * : J Z j z VT ESC + ; K [ k { FF FS , < L \ l | CR GS - = M ] m } SO RS . > N ^ n ~ SI US / ? O _ o DEL 7416 0111 0100 sif-1053
Représentation des caractères (EBCDIC, 8 bits) 28/08/2018 Représentation des caractères (EBCDIC, 8 bits) sif-1053
Représentation des caractères (Unicode, 16 bits) 28/08/2018 Représentation des caractères (Unicode, 16 bits) 128 premiers codes comme le code ASCII sif-1053
28/08/2018 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 28/08/2018 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 28/08/2018 Organisation de la mémoire en mots 32-bit Words 64-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 28/08/2018 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 28/08/2018 Dimensions des objets en C (Octets) machine 64 bits sif-1053
Ordre des octets Question importante ??? Conventions Exemple 28/08/2018 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 Big Endian 01 23 45 67 Little Endian 67 45 23 01 28/08/2018 Big Endian 0x100 0x101 0x102 0x103 01 23 45 67 Little Endian 0x100 0x101 0x102 0x103 67 45 23 01 sif-1053
Observation des représentations de données 28/08/2018 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 28/08/2018 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 28/08/2018 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 28/08/2018 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 28/08/2018 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 typedef unsigned char pixel; typedef unsigned char *pointeur; pixel image[1024][1024]; pixel image[DIM][DIM]; sif-1053
Notions de programmation en langage C 28/08/2018 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 28/08/2018 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 28/08/2018 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
28/08/2018 Addition 11 1111 111 099 0110 0011 +095 +0101 1111 194 1100 0010 sif-1053
28/08/2018 Table d ’addition sif-1053
28/08/2018 Soustraction 1 11 109 0110 1101 -049 -0011 0001 060 0011 1100 sif-1053
28/08/2018 Table de soustraction sif-1053
Les nombres négatifs 28/08/2018 Quand on porte son regard sur les nombres binaires, il apparaît tout d'abord que les seuls nombres que l'on puisse représenter dans cette notation sont les entiers positifs. Peut-on, alors, examiner des nombres négatifs? Comment? Plusieurs méthodes ont été utilisées pour représenter les nombres négatifs, mais la plupart d'entre elles ne conviennent pas bien à l'électronique binaire de l'UAL (unité arithmétique et logique des ordinateurs). Ces essais infructueux ont, cependant, conduit à la mise au point d'un système bien adapté. sif-1053
28/08/2018 Un des premiers systèmes utilisés était celui de la valeur absolue et du signe. Dans cette méthode le bit le plus significatif du nombre binaire est utilisé comme bit de signe. La règle appliquée est la suivante, si le bit le plus significatif est 0, le nombre est positif, si c'est 1, le nombre est négatif. Binaire Décimal 0001 1100 + 28 1001 1100 - 28 sif-1053
Signe et valeur absolue 28/08/2018 0000 +0 0001 +1 0010 +2 0011 +3 0100 +4 0101 +5 0110 +6 0111 +7 1000 -0 1001 -1 1010 -2 1011 -3 1100 -4 1101 -5 1110 -6 1111 -7 5 -2 3 0101 + 1010 ?111 sif-1053
28/08/2018 La notation du complément à "1" est une autre représentation, où le bit le plus significatif à 0 signifie positif, et à 1 négatif. Dans cette notation, tous les bits d'un nombre négatif sont complémentés, c'est-à-dire que tous les bits à 1 sont mis à 0 et réciproquement. Cette procédure modifie également le bit de signe, ce qui transforme le BLPS en un 1. Bien que la génération du complément à 1 soit facile, cette notation présente un certain nombre de désavantages, elle rend le travail difficile et entraîne l'existence de deux représentations pour zéro, soit tous les bits à 1, soit tous les bits à 0. sif-1053
La notation du complément à « 1 » 28/08/2018 0000 +0 0001 +1 0010 +2 0011 +3 0100 +4 0101 +5 0110 +6 0111 +7 1000 -7 1001 -6 1010 -5 1011 -4 1100 -3 1101 -2 1110 -1 1111 -0 1 1 5 -2 3 0101 + 1101 0010 1 1 0011 sif-1053
La notation du complément à 2 28/08/2018 La notation du complément à 2 est une représentation des nombres signés qui est largement répandue aujourd'hui parmi les manufacturiers d'ordinateurs. Elle résout le problème de la double expression du zéro. Dans la notation du complément à 2, un nombre négatif est représenté en prenant le complément à 1 du même nombre positif et en lui ajoutant 1. On peut donc représenter tous les nombres décimaux compris entre -128 et +127 (zéro compris) par des nombres binaires à 8 bits (octets). sif-1053
0000 0000 +0 0 Nombre binaire Équivalent décimal Équivalent de 8 bits signé selon la notation décimal du complément à 2 non signé 0000 0000 +0 0 0000 0001 +1 1 0000 0010 +2 2 0000 0011 +3 3 . . . 0111 1100 +124 124 0111 1101 +125 125 0111 1110 +126 126 0111 1111 +127 127 1000 0000 -128 128 1000 0001 -127 129 1000 0010 -126 130 1000 0011 -125 131 1111 1100 -4 252 1111 1101 -3 253 1111 1110 -2 254 1111 1111 -1 255 28/08/2018 sif-1053
Pour vous convaincre 28/08/2018 La simplicité de cette notation peut être illustrée en opérant une soustraction. Soustraire, c'est tout simplement exprimer dans la notation du complément à 2 le terme que l'on désire soustraire et l'ajouter au terme dont on désire le soustraire. Le terme positif étant également représenté dans la notation du complément à deux. La différence est alors exprimée dans la notation du complément à 2, c'est-à-dire que si elle est positive, le BLPS est 0. Si la différence est négative, le BLPS est 1. sif-1053
0001 0111 +2310 (not. comp. 2 : nc2) 1110 1000 Complément à 1 de 2310 0000 0001 Ajouter 1 1110 1001 -2310 (nc2) 58 0011 1010 +5810 (nc2) -23 1110 1001 - 2310 (nc2) 35 1 0010 0011 +3510 (nc2) Rejeter la retenue 28/08/2018 sif-1053
0010 0010 +3410 (nc2) 1101 1101 Complément à 1 de 3410 0000 0001 Ajouter 1 1101 1110 -3410 (nc2) 26 0001 1010 +2610 (nc2) -34 1101 1110 -3410 (nc2) -08 1111 1000 -810 (nc2) Différence négative puisque BLPS = 1 28/08/2018 sif-1053
Codage des entiers En C un short a 2 octets de long Unsigned 28/08/2018 Unsigned Complément à 2 short int x = 15213; short int y = -15213; Bit de signe En C un short a 2 octets de long Complément à 2 de ~X sif-1053
Codage des entiers La négation d’un entier s’obtient selon la règle: 28/08/2018 Complément à 2 La négation d’un entier s’obtient selon la règle: Prendre le complément booléen de chaque bit d’un entier Considérez le résultat comme un entier binaire non signé et ajoutez 1 Une séquence de n bits aw-1 aw-2 … a1 a0 est interprétée comme un entier A en complément à 2: sif-1053
Codage des entiers 28/08/2018 Formons le complément bit à bit a’w-1 a’w-2 … a’1 a’0 et traitons le comme un entier non signé en lui ajoutant 1 qui donne un entier B en complément à 2: Nous voulons alors prouver que A = -B, que A + B = 0 : sif-1053
Intervalles des valeurs 28/08/2018 Valeurs complément 2 TMin = –2w–1 100…0 TMax = 2w–1 – 1 011…1 Autres Valeurs Minus 1 111…1 Valeurs Unsigned UMin = 0 000…0 UMax = 2w – 1 111…1 Valeurs pour W = 16 sif-1053
Valeurs pour différents mots 28/08/2018 Observations |TMin | = TMax + 1 Intervalle Asymmétrique UMax = 2 * TMax + 1 Programmation C #include <limits.h> Constantes ULONG_MAX LONG_MAX LONG_MIN sif-1053
Valeurs pour différents mots 28/08/2018 Programmation C #include <limits.h> //voir le contenu du fichier sif-1053
Conversion d’objets Signed à Unsigned 28/08/2018 C permet la conversion d’objets Signed à Unsigned Résultat de la conversion Pas de changement de la représentation binaire Valeurs positives inchangées ux = 15213 Valeurs négatives deviennent positives uy = 50323 short int x = 15213; unsigned short int ux = (unsigned short) x; short int y = -15213; unsigned short int uy = (unsigned short) y; sif-1053
Conversion d’objets Signed à Unsigned 28/08/2018 + 2w Dangereux de faire des erreurs unsigned i; for (i = cnt-2; i >= 0; i--) a[i] += a[i+1]; Si cnt == 1 sif-1053
Conversion d’objets Signed à Unsigned (vice-versa) 28/08/2018 -2w sif-1053
Addition de valeurs unsigned 28/08/2018 u • • • Opérandes: w bits + v • • • Somme vraie: w+1 bits u + v • • • Retenue éliminée: w bits UAddw(u , v) • • • Fonction d’addition standard La retenue en sortie est ignorée Implémentation de l’arithmétique modulo s = UAddw(u , v) = u + v mod 2w sif-1053
Addition de valeurs unsigned 28/08/2018 sif-1053
Addition de valeurs unsigned 28/08/2018 sif-1053
Addition de valeurs unsigned 28/08/2018 Overflow sif-1053
Addition de valeurs complément 2 28/08/2018 u • • • Opérandes: w bits + v • • • Somme vraie: w+1 bits u + v • • • Retenue éliminée: w bits TAddw(u , v) • • • TAdd() et UAdd() ont un comportement identique au niveau des bits Addition de nombres Signed vs. Unsigned: int s, t, u, v; s = (int) ((unsigned) u + (unsigned) v); t = u + v Donne: s == t sif-1053
Addition de valeurs complément 2 28/08/2018 (NegOver) (PosOver) sif-1053
Addition de valeurs complément 2 28/08/2018 Negative overflow Positive overflow sif-1053
Addition de valeurs complément 2 28/08/2018 Détection automatique des ovf Sachant que s = TAddw(u , v) Exemple int s, u, v; s = u + v; ovf = (u<0 == v<0) && (u<0 != s<0); Un overflow survient (ovf == 1) quand: u, v < 0, s 0 (NegOver) u, v 0, s < 0 (PosOver) ovf = (u>0 && v>0 && s<0) || (u<0 && v<0 && s>=0) sif-1053
La multiplication 28/08/2018 Comme dans le cas de l'addition et de la soustraction, les multiplications décimale et binaire sont très semblables. Chacune est une manière rapide d'ajouter à lui-même un grand nombre de fois, le même nombre. Multiplier 7 par 5 est, par exemple, une façon rapide d'ajouter 7 à lui-même 5 fois. 17 Multiplicande x 12 Multiplicateur 34 1er produit partiel 17 2e produit partiel 1 Retenue 204 Produit total sif-1053
00010001 Multiplicande +1710 00001100 Multiplicateur +1210 28/08/2018 00010001 Multiplicande +1710 00001100 Multiplicateur +1210 00000000 1er produit partiel 00000000 2e produit partiel 00010001 3e produit partiel 00010001 4e produit partiel 00000000 5e produit partiel 00000000 6e produit partiel 00000000 7e produit partiel 00000000 8e produit partiel 0000000011001100 Produit +20410 sif-1053
28/08/2018 La somme de tous les produits partiels représente un produit final (le total). Ces additions n'ont cependant généré aucune retenue, comme cela aurait pu se produire, pourquoi? Tout simplement parce que nous avons prévu cette possibilité. En fait, les multiplications ne génèrent jamais de retenu. Lorsque nous multiplions deux nombres de n bits, le résultat est toujours compris dans 2n bits. Donc, le résultat doit toujours être exprimé avec 2n bits. sif-1053
Multiplication de valeurs unsigned en C 28/08/2018 u • • • * v • • • u · v • • • • • • UMultw(u , v) • • • Fonction de multiplication standard Ignore les w bits de poids forts Implémentation de l’arithmétique modulo UMultw(u , v) = u · v mod 2w sif-1053
Multiplication Unsigned vs. Signed 28/08/2018 Multiplication Unsigned unsigned ux = (unsigned) x; unsigned uy = (unsigned) y; unsigned up = ux * uy Troncature du produit à w-bit up = UMultw(ux, uy) Arithmetique modulo up = ux uy mod 2w Multiplication complément 2 int x, y; int p = x * y; Calcul du produit exacte de deux nombres de w-bit x, y Troncature du produit à w-bit p = TMultw(ux, uy) Relation up == (unsigned) p sif-1053
Multiplication par des puissances de 2 28/08/2018 Opération de décalage u << k => u * 2k Pour les unsigned et signed Exemples u << 3 == u * 8 u << 5 - u << 3 == u * 24 La plupart des machines décalent et additionnent plus vite Compilateur génère automatiquement ce code k u • • • * 2k ••• 1 ••• u · 2k • • • ••• Éliminer k bits UMultw(u , 2k) ••• ••• TMultw(u , 2k) sif-1053
La division 28/08/2018 La division est l'opération inverse de la multiplication en ce sens que nous soustrayons de façon répétitive un nombre d'un autre jusqu'à ce que cela ne soit plus possible. Le nombre de fois que nous pouvons soustraire le premier nombre (dividende) nous indique le nombre de fois que le second nombre (diviseur) peut être divisé par le premier. sif-1053
Division par des puissances de 2 de nombres Unsigned 28/08/2018 Résultat est un Quotient u >> k => u / 2k k u Point binaire ••• ••• / 2k ••• 1 ••• u / 2k . ••• ••• ••• u / 2k ••• ••• sif-1053
Division par des puissances de 2 de nombres complément 2 28/08/2018 Résultat est un Quotient u >> k => u / 2k 1 ••• u 2k / u / 2k k RoundDown(u / 2k) . Binary Point sif-1053
La conclusion 28/08/2018 La notation du complément à 2 permet de transformer une soustraction binaire en addition binaire. Une multiplication binaire correspond à une suite d ’additions binaires. Une division binaire n ’est qu ’une suite de soustractions binaires. Mais comme la soustraction n ’est qu ’une addition. Un ordinateur ne sait et ne peut qu ’additionner!!! sif-1053