Systèmes Informatiques TD 3: langage C opérations élémentaires



Documents pareils
IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction au langage C

Informatique Générale

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

V- Manipulations de nombres en binaire

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours Informatique 1. Monsieur SADOUNI Salheddine

Représentation d un entier en base b

SUPPORT DE COURS. Langage C

Notions fondamentales du langage C# Version 1.0

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

UE C avancé cours 1: introduction et révisions

Cours d Algorithmique et de Langage C v 3.0

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions


Introduction à l algorithmique et à la programmation M1102 CM n 3

Cours d initiation à la programmation en C++ Johann Cuenin

Programmation en langage C

Plan du cours. Historique du langage Nouveautés de Java 7

Rappels Entrées -Sorties

UE Programmation Impérative Licence 2ème Année

Représentation des Nombres

Algorithmique et Programmation, IMA

Logiciel de Base. I. Représentation des nombres

INF 321 : mémento de la syntaxe de Java

STAGE IREM 0- Premiers pas en Python

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Langage Éric Guérin 5 octobre 2010

Rappels d architecture

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Claude Delannoy. 3 e édition C++

Programmer en JAVA. par Tama

Chapitre 10 Arithmétique réelle

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Bases de programmation. Cours 5. Structurer les données

TP 1. Prise en main du langage Python

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction à MATLAB R

Compilation (INF 564)

Présentation du langage et premières fonctions

Microprocesseur + Logiciel

IV- Comment fonctionne un ordinateur?

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

La programmation des PIC en C. Les fonctions, les interruptions.

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

as Architecture des Systèmes d Information

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Architecture de l ordinateur

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Recherche dans un tableau

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Les structures. Chapitre 3

Initiation à la programmation en Python

Algorithme. Table des matières

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

ASR1 TD7 : Un microprocesseur RISC 16 bits

Programmation Classique en langage C

Conversion d un entier. Méthode par soustraction

TP : Gestion d une image au format PGM

CM2 L architecture MIPS32

TD3: tableaux avancées, première classe et chaînes

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

Langage Java. Classe de première SI

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Codage d information. Codage d information : -Définition-

Initiation. àl algorithmique et à la programmation. en C

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Architecture matérielle des systèmes informatiques

Architecture des ordinateurs

2 Comment fonctionne un ordinateur, dans les grandes lignes

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

La mémoire. Un ordinateur. L'octet. Le bit

Introduction à l algorithmique et à la programmation avec Python. Laurent Signac

Les bases de l informatique et de la programmation. École polytechnique

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation en Java IUT GEII (MC-II1) 1

Les opérations binaires

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

ACTIVITÉ DE PROGRAMMATION

Java Licence Professionnelle CISII,

Cours de programmation avancée. Le langage C. Université du Luxembourg

Programmation C++ (débutant)/instructions for, while et do...while

Transcription:

Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org

Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques. P. Bakowski 2

Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques. Ces opérateurs correspondent aux instruction disponibles dans les micro-processeurs processeurs. Complex/ omplex/reduced educed Instruction Set Computer P. Bakowski 3

Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques. Ces opérateurs correspondent aux instruction disponibles dans les micro-processeurs. Les opérateurs logiques permettent d effectuer les opérations binaires/booléennes et les décalages logiques. P. Bakowski 4

Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques. Ces opérateurs correspondent aux instruction disponibles dans les micro-processeurs. Les opérateurs logiques permettent d effectuer les opérations binaires/booléennes et les décalages logiques. Les opérateurs arithmétiques réalisent les traitements numériques en virgule fixe et en virgule flottante. P. Bakowski 5

Opérateurs logiques/arithmétiques Dans ce TD nous allons exploiter les opérateurs logiques afin de: traiter les champs binaires P. Bakowski 6

Opérateurs logiques/arithmétiques Dans ce TD nous allons exploiter les opérateurs logiques afin de: traiter les champs binaires construire les fonctions arithmétiques non- disponibles directement par le biais des opérateurs arithmétiques P. Bakowski 7

Opérateurs logiques/arithmétiques La liste des opérateurs binaires/booléennes est la suivante: - ou binaire (opération sur vecteur binaire) & - et binaire ~ - non binaire ^ - ou-exclusif binaire P. Bakowski 8

Opérateurs logiques/arithmétiques La liste des opérateurs binaires/booléennes booléennes est la suivante: - ou binaire (opération sur vecteur binaire) & - et binaire ~ - non binaire ^ - ou-exclusif binaire - ou booléen (opération sur valeur logique) && - et booléen! - non booléen P. Bakowski 9

Opérateurs logiques/arithmétiques Exemples: - ou binaire (opération sur vecteur binaire) - ou booléen (opération sur valeur logique) P. Bakowski 10

Opérateurs logiques/arithmétiques Exemples: - ou binaire (opération sur vecteur binaire) - ou booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; 11111110 00010001 P. Bakowski 11

Opérateurs logiques/arithmétiques Exemples: - ou binaire (opération sur vecteur binaire) - ou booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; c = a b ; // c=255 11111110 00010001 11111111 P. Bakowski 12

Opérateurs logiques/arithmétiques Exemples: - ou binaire (opération sur vecteur binaire) - ou booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; c = a b ; // c=255 d = a b ; // d=1 11111110 00010001 11111111 00000001 P. Bakowski 13

Opérateurs logiques/arithmétiques Exemples: & - et binaire (opération sur vecteur binaire) && - et booléen (opération sur valeur logique) P. Bakowski 14

Opérateurs logiques/arithmétiques Exemples: & - et binaire (opération sur vecteur binaire) && - et booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; 11111110 00010001 P. Bakowski 15

Opérateurs logiques/arithmétiques Exemples: & - et binaire (opération sur vecteur binaire) && - et booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; c = a&b ; // c=16 11111110 00010001 00010000 P. Bakowski 16

Opérateurs logiques/arithmétiques Exemples: & - et binaire (opération sur vecteur binaire) && - et booléen (opération sur valeur logique) unsigned char a=254; unsigned char b=17; unsigned char c,d; c = a&b ; // c=16 d = a&&b ; // d=1 11111110 00010001 00010000 00000001 P. Bakowski 17

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage logique/binaire P. Bakowski 18

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage logique/binaire unsigned char a=252; unsigned char c,d; c = a>>2 ; // c=63 11111100 00111111 P. Bakowski 19

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage logique/binaire unsigned char a=252; unsigned char c,d; c = a>>2 ; // c=63 d = a<<5 ; // d=128 11111100 00111111 10000000 P. Bakowski 20

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage arithmétique P. Bakowski 21

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage arithmétique signed char a=-4; signed char c,d; c = a>>2 ; // c=-1 11111100 11111111 reproduction de 1 P. Bakowski 22

Opérateurs logiques/arithmétiques Exemples: >>, << - décalage arithmétique signed char a=-4; signed char c,d; c = a>>2 ; // c=-1 d = a<<2 ; // d=-16 11111100 11111111 11110000 P. Bakowski 23

Exercice 1 une fonction Exercice 1: déchiffrer la signification de la fonction ci-dessous: int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>= >>=1); return r; } P. Bakowski 24

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } Prenons un int sur 4 bits: a= 0010; b=0011; P. Bakowski 25

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1( b>>=1); return r; } Prenons un int sur 4 bits: a= 0010; b=0011; La boucle while fonctionne tant que b contient de 1 (22 pas: : 0001,0000) P. Bakowski 26

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a,, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } premier pas: a= 0010 (2); b=0011 (3); P. Bakowski 27

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } premier pas: a= 0010 (2); b=0011 (3); b&masque => 1 (vrai( vrai) P. Bakowski 28

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } premier pas: a= 0010 (2);( b=0011 (3); b&masque => 1 (vrai) donc r= = 1*2 => 2; a2 => 2*2 => 4 P. Bakowski 29

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } premier pas: a= 0010 (2); b=0011 (3); b&masque => 1 (vrai) donc r= 1*2 => 2; a2 => 2*2 => 4 b>>1 donne 0001 deuxième pas P. Bakowski 30

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } deuxième pas: a= 0010 (2); b=0001 (1); P. Bakowski 31

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } deuxième pas: a= 0010 (2); b=0001 (1); b&masque => 1 (vrai( vrai) P. Bakowski 32

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } deuxième pas: a= 0010 (2); b=0001 (1); b&masque => 1 (vrai) donc r= 2*4 => 8; a2 => 8*8 => 64 P. Bakowski 33

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } deuxième pas: a= 0010 (2); b=0001 (1); b&masque => 1 (vrai) donc r= 2*4 => 8; a2 => 8*8 => 64 b>>1 donne 0000 => fin de boucle P. Bakowski 34

Exercice 1 une fonction int f(int a,int b) { int r=1, a2=a, masque=1; do { if(b&masque) r*=a2; a2 *= a2; } while (b>>=1); return r; } deuxième pas: a= 0010 (2); b=0001 (1); b&masque => 1 (vrai) donc r= 2*4 => 8; a2 => 8*8 => 64 b>>1 donne 0000 => fin de boucle return r donne 8 comme résultat (alors( alors?) P. Bakowski 35

Exercice 2 masque et décalage Exercice 2: Écrire une fonction type printb(val) qui affiche la valeur binaire d un entier (int val). P. Bakowski 36

Exercice 2 masque et décalage Exercice 2: Écrire une fonction type printb(val) qui affiche la valeur binaire d un entier (int val). Utiliser un masque et les opérateurs: & et >> P. Bakowski 37

Exercice 2 masque et décalage Exercice 2: Écrire une fonction type printb(val) qui affiche la valeur binaire d un entier (int val). Utiliser un masque et les opérateurs: & et >> Pour l affichage utiliser la fonction putchar(..) affiche un caractère ASCII P. Bakowski 38

Exercice 2 masque et décalage int printb(int a) { unsigned int masque=0x80000000; 0000000; 10000000 000000000000000 0000 000000000000000 P. Bakowski 39

Exercice 2 masque et décalage int printb(int a) { unsigned int masque=0x80000000; do { if(a&masque a&masque) ) putchar( 1 ); else putchar( 0 ); } while (masque>>=1( masque>>=1); premier pas: } 10000000 000000000000000 & a = -25 11111111 1111111111001111111111 111111111100111 affichage=> 1 P. Bakowski 40

Exercice 2 masque et décalage int printb(int a) { unsigned int masque=0x80000000; do { if(a&masque a&masque) ) putchar( 1 ); else putchar( 0 ); } while (masque>>=1( masque>>=1); deuxième pas: } 01000000 000000000000000000000 000000000000000 & a = -25 11111111 111111111100111111111 111111111100111 affichage=> 1 P. Bakowski 41

Exercice 2 masque et décalage int printb(int a) { unsigned int masque=0x80000000; do { if(a&masque a&masque) ) putchar( 1 ); else putchar( 0 ); } while (masque>>=1( masque>>=1); 32ème pas: } 0000000 0000000000000001 & a = -25 11111111 111111111100111 affichage=> 1 P. Bakowski 42

Exercice 3 - masque et décalage Exercice 3: Écrire une fonction type printb(val) qui affiche la valeur binaire d un nombre en virgule flottante (float val). P. Bakowski 43

Exercice 3 - masque et décalage Exercice 3: Écrire une fonction type printb(val) qui affiche la valeur binaire d un nombre en virgule flottante (float val). Utiliser un masque et les opérateurs: & et >> P. Bakowski 44

Exercice 3 - masque et décalage Exercice 3: Écrire une fonction type printb(val) qui affiche la valeur binaire d un nombre en virgule flottante (float val). Utiliser un masque et les opérateurs: & et >> Réfléchir sur le problème d incompatibilité entre les opérateurs et les types de données! P. Bakowski 45

Exercice 3 - masque et décalage Exercice 3: Écrire une fonction type printb(val) qui affiche la valeur binaire d un nombre en virgule flottante (float val). Utiliser un masque et les opérateurs: & et >> Réfléchir sur le problème d incompatibilité entre les opérateurs et les types de données! Comment contourner ce problème en C? P. Bakowski 46

Exercice 3 - masque et décalage Exercice 3: Écrire une fonction type printb(val) qui affiche la valeur binaire d un nombre en virgule flottante (float val). Utiliser un masque et les opérateurs: & et >> Réfléchir sur le problème d incompatibilité entre les opérateurs et les types de données! Comment contourner ce problème en C? Étudier la différence entre une structure et une union. P. Bakowski 47

Exercice 3 - masque et décalage int printb(float a) { unsigned int masque=0x80000000; union { float fa; unsigned int ia;} u; float fa unsigned int ia le même emplacement dans la mémoire: 4 octets P. Bakowski 48

Exercice 3 - masque et décalage int printb(float a) { unsigned int masque=0x80000000; union { float fa;unsigned int ia;} u; u.fa = a; a float fa le même emplacement unsigned int ia P. Bakowski 49

Exercice 3 - masque et décalage int printb(float a) { unsigned int masque=0x80000000; union { float fa;unsigned int ia;} u; u.fa = a; do { if(u.ia&masque u.ia&masque) ) putchar( 1 ); else putchar( 0 ); } while (masque>>=1); } float fa opération autorisée unsigned int ia P. Bakowski 50

Exercice 4 - multiplication Certains processeurs simples ne disposent pas des instructions de multiplication. RISC - pas de multiplication! P. Bakowski 51

Exercice 4 - multiplication Certains processeurs simples ne disposent pas des instructions de multiplication. Dans ce cas il faut réaliser les multiplications par le biais des opérateurs logiques et arithmétiques simples (addition et soustraction). mult(a,b) return p; P. Bakowski 52

Exercice 4 - multiplication Remarquons que l opération de puissance doit être toujours programmée par les opérations plus simples (multiplication) voir exercice 1 pow(a,b) a b => return r; P. Bakowski 53

Exercice 4 - multiplication Écrire une fonction qui multiplie deux valeurs a et b de type int. P. Bakowski 54

Exercice 4 - multiplication Écrire une fonction qui multiplie deux valeurs a et b de type int. int mult(a,b) {.. } P. Bakowski 55

Exercice 4 - multiplication Écrire une fonction qui multiplie deux valeurs a et b de type int. int mult(a,b) {.. } Utiliser exclusivement les opérateurs du décalage (>> >>) ) et de l addition (+)( P. Bakowski 56

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 000101 000001 premier pas: m&a => true; ; p=101 (5); P. Bakowski 57

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 000101 000001 premier pas: m&a => true; p=101 (5); b<<1 => 001010 (10) m<<1 => 000010 P. Bakowski 58

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 001010 000010 deuxième pas: m&a => true; ; p=1111 (15); P. Bakowski 59

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 001010 000010 deuxième pas: m&a => true; p=1111 (15); b<<1 => 010100 (20) m<<1 => 000100 P. Bakowski 60

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 010100 000100 troisième pas : m&a => false; ; p=1111 (15); P. Bakowski 61

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 010100 000100 troisième pas : m&a => false; p=1111 (15); b<<1 => 101000 (40) m<<1 => 001000 P. Bakowski 62

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 101000 100000 dernier pas : m&a => false; ; p=1111 (15); P. Bakowski 63

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 101000 100000 dernier pas : m&a => false; p=1111 (15); b<<1 => 100000 (64) m<<1 => 000000 => fin P. Bakowski 64

Exercice 4 - multiplication int mult(int a,int b) { int p=0; int m=1; do { if(m&a) p+=b; b<<=1 } while (m<<=1); return p; } 000011 101000 100000 dernier pas : m&a => false; p=1111 (15); b<<1 => 100000 (64) m<<1 => 000000 => fin return résultat = 15 P. Bakowski 65