Cours 2 2. Représentation et traitement des informations Le matériel

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Architecture de machines Codage des informations
Introduction au Langage C,C++
Introduction au langage C
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
C.
Le codage de l ’information
Structures et unions types énumérés Qu'est-ce qu'une structure
INTRODUCTION.
FLSI602 Génie Informatique et Réseaux
Présentation Unité de codage
Le binaire L’historique.
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Expressions et assignations
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Nature, numération, code
Le Langage Binaire.
Le codage des nombres en informatique
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
IFT 6800 Atelier en Technologies d’information
8PRO100 Éléments de programmation Les types composés.
Structures de données IFT-2000
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Types de données fondamentaux
L’essentiel du langage C
2.1 - Historique Chapitre 2 : Introduction au langage C++
INTRODUCTION.
SIF-1053 Architecture des ordinateurs
L’écriture des grands nombres: les puissances de 10
Un survol du language C.
Codage des nombres en informatique : le système binaire.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
REPRESENTATION DE L’INFORMATION
Représentation des entiers
Le codage des nombres en informatique
Microcontrôleurs PIC. 1ère séance Présentation du PIC16F876 Outils de programmation du PIC Le langage C Exemples d’applications simples 2ème séance Présentation.
1 INFOR 101 Chapitre 4 Marianne Morris. 2 Révision de chapitre 3 Algorithmes Sequential Search Selection Sort Binary Search Ordre de magnitude  (n) Mesurer.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
Cours LCS N°4 Présenté par Mr: LALLALI
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Introduction aux systèmes numériques
Patricia Renault UPMC 2005/2006
Introduction à la programmation (420-PK2-SL) cours 1
Codage de l’information
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Cours d’initiation en Informatique
PRO-1027 Programmation Scientifique en C
Chapitre 4 La représentation des nombres.
©Pierre Marchand, Unité 2: Représentation interne des informations Objectifs: À la fin de cette unité, -vous saurez comment les caractères et les.
Chapitre 4b La représentation des nombres.
Chapitre 9 Les caractères.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Chapitre 3 La numération octale et hexadécimale.
Objets et Actions Élémentaires.
CHAPITRE 5 Les nombres entiers 1. Les entiers 2 Les entiers signés représentations pour le 0.
Introduction au langage C
La NUMERISATION de l’information
A. Lebrun. La base 2 Un nombre peut se représenter en base deux par une suite de 0 ou de 1. Chaque bit a un poids qui dépend de son rang Le format n impose.
Transcription de la présentation:

Cours 2 2. Représentation et traitement des informations Le matériel 13/04/2017 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 13/04/2017 Computer 1101000101010101… Input device A 1+2=3 math Code ASCII Code binaire sif-1053

Formats de données Ordinateurs Communication humaine 13/04/2017 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 13/04/2017 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 13/04/2017 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) 13/04/2017 Échantillonnage typique: 44.1KHz Amplitude: 8 bits ou 16 bits ou 2 X16 bits (stéréo) sif-1053

Le système décimal 13/04/2017 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 13/04/2017 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 13/04/2017 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

13/04/2017 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 13/04/2017 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

13/04/2017 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 ???) 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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

13/04/2017 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 13/04/2017 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 13/04/2017 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) 13/04/2017 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) 13/04/2017 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 13/04/2017 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) 13/04/2017 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) 13/04/2017 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 13/04/2017 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

13/04/2017 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

13/04/2017 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

13/04/2017 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 13/04/2017 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

13/04/2017 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

13/04/2017 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 13/04/2017 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) 13/04/2017 Représentation des caractères (ASCII) 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

13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 Dimensions des objets en C (Octets) machine 64 bits sif-1053

Ordre des octets Question importante ??? Conventions Exemple 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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

13/04/2017 Addition 11 1111 111 099 0110 0011 +095 +0101 1111 194 1100 0010 sif-1053

13/04/2017 Table d ’addition sif-1053

13/04/2017 Soustraction 1 11 109 0110 1101 -049 -0011 0001 060 0011 1100 sif-1053

13/04/2017 Table de soustraction sif-1053

Les nombres négatifs 13/04/2017 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

13/04/2017 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 13/04/2017 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

13/04/2017 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 » 13/04/2017 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 13/04/2017 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 13/04/2017 sif-1053

Pour vous convaincre 13/04/2017 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 13/04/2017 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 13/04/2017 sif-1053

Codage des entiers En C un short a 2 octets de long Unsigned 13/04/2017 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: 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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

Conversion d’objets Signed à Unsigned 13/04/2017 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 13/04/2017 + 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) 13/04/2017 -2w sif-1053

Addition de valeurs unsigned 13/04/2017 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 13/04/2017 sif-1053

Addition de valeurs unsigned 13/04/2017 sif-1053

Addition de valeurs unsigned 13/04/2017 Overflow sif-1053

Addition de valeurs complément 2 13/04/2017 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 13/04/2017 (NegOver) (PosOver) sif-1053

Addition de valeurs complément 2 13/04/2017 Negative overflow Positive overflow sif-1053

Addition de valeurs complément 2 13/04/2017 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 13/04/2017 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 13/04/2017 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

13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 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 13/04/2017 Résultat est un Quotient u >> k =>  u / 2k  1 ••• u 2k / u / 2k k RoundDown(u / 2k) . Binary Point sif-1053

La conclusion 13/04/2017 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