Chapitre 5. Opérateurs, expressions et conversions

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

SUPPORT DE COURS. Langage C

Claude Delannoy. 3 e édition C++

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

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

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

Rappels Entrées -Sorties

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

Programmation en langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


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

Le langage C. Introduction, guide de reference

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

TP 1. Prise en main du langage Python

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

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

INF 321 : mémento de la syntaxe de Java

Algorithmique et Programmation, IMA

Cours d Algorithmique et de Langage C v 3.0

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Chapitre 10 Arithmétique réelle

Informatique Générale

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

STAGE IREM 0- Premiers pas en Python

ALGORITHMIQUE ET PROGRAMMATION En C

Représentation des Nombres

Logiciel de Base. I. Représentation des nombres

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction au Langage de Programmation C

Programmation en C/C++

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

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)

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

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

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

Programmation C. J.-F. Lalande. 15 novembre 2012

Architecture de l ordinateur

Introduction au langage C

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Chapitre 1 : La gestion dynamique de la mémoire

Les structures de données. Rajae El Ouazzani

Programmation Classique en langage C

Langages et Concepts de Programmation Introduction à la programmation en langage C

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

Cours d Informatique

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

Algorithmique, Structures de données et langage C

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

Conversion d un entier. Méthode par soustraction

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

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

Chap III : Les tableaux

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Analyse de sécurité de logiciels système par typage statique

Programmation Structurée en Langage C

Initiation à la Programmation en Logique avec SISCtus Prolog

Présentation du langage et premières fonctions

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

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

INITIATION A LA PROGRAMMATION

Créer le schéma relationnel d une base de données ACCESS

Initiation à la programmation en Python

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Les chaînes de caractères

Python - introduction à la programmation et calcul scientifique

Programmation système I Les entrées/sorties

Support de Cours de Langage C. Christian Bac

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

Le langage C. Séance n 4

Création et Gestion des tables

Recherche dans un tableau

V- Manipulations de nombres en binaire

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

Introduction à MATLAB R

Java Licence Professionnelle CISII,

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

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Les structures. Chapitre 3

Structurer ses données : les tableaux. Introduction à la programmation

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

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

Programmation impérative

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Informatique / Programmation

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

2 Comment fonctionne un ordinateur, dans les grandes lignes

Chapitre VI- La validation de la composition.

Transcription:

Chapitre 5 : Opérateurs, expressions et conversion 41 Chapitre 5 Opérateurs, expressions et conversions Chapitre 5 : Opérateurs, expressions et conversion 42 1. Expressions - Une expression est la composition d opérateurs, de variables, de constantes, de fonctions et de parenthèses. - Une expression retourne toujours un résultat, sa valeur. - La valeur de l expression a un type et, elle peut-être utilisée dans une autre expression Dans cet exemple : int x = 3 + sin(z) ; Variable : Z Constante : 3 Fonction : sin Valeur de retour : x, type «int»

Chapitre 5 : Opérateurs, expressions et conversion 43 2. Opérateurs - Le langage C++ est riche en opérateurs. Priorité et associativité des opérateurs Opérateur Associativité :: (portée globale) :: (portée classe) () [] ->. (postfixe)++ (postfixe)-- sizeof typedef ++(préfixe) -(prefixe)! ~ &(adresse) +(unaire) (unaire) Droite - Gauche *(indirection) delete new casts.* ->* * / % + - << >> < <= > >= ==!= & ^ &&?: Droite Gauche = += -= *= /= %= >>= <<= &= ^= = Droite Gauche, (opérateur virgule) Chapitre 5 : Opérateurs, expressions et conversion 44 2.1 Opérateurs arithmétiques Expression arithmétique Commentaire (par ordre de priorité) -i +j moins unaire, plus unaire i*j i/j i%10 multiplication division modulo i+j i-j addition soustraction i = 3/2.0 a prend la valeur 1.5 i = 3/2 a prend la valeur 1 - Le symbole «%» représente l opérateur modulo. - Il fournit le reste de la division entière de son premier opérande par son second. - Remarque : la division entière n est réalisée que sur des nombres entiers. En Java, elle peut être utilisée aussi sur des réels (float). 11%4 vaut 3 12%4 vaut 0 11%2 vaut 1

Chapitre 5 : Opérateurs, expressions et conversion 45 2.2 Opérateurs de manipulation de bits Manipulation de bits Commentaire ~i négation bit à bit. Il inverse un à un tous les i=0x5f ~i=10100000 160 bits de son unique opérande i << n décalage à gauche de n rangs. Les bits sortants i = -100 sont perdus. Ils sont remplacés par des 0. Si la i << 2 i = -400 variable est signée, le bit de signe est conservé. Multiplication par 2. i >> n décalage à droite de n rangs. Les bits sortants i = -100 sont perdus. Ils sont remplacés par des 0. Si la i >> 2 i = -25 variable est signée, le bit de signe est conservé. Division par 2. & ET bit à bit entre les valeurs de 2 expressions OU bit à bit entre les valeurs de 2 expressions ^ OU exclusif bit à bit entre les valeurs de 2 expressions Op1 Op2 Op1&Op2 Op1 Op2 Op1^Op2 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 Chapitre 5 : Opérateurs, expressions et conversion 46 2.3 Opérateurs d incrément et de décrément - Les opérateurs d incrémentation ou décrémentation sont placés soit avant (pré) soit après (post) la variable. Incrément et décrément Expression équivalente j = ++i ; D abord i = i+1 ; puis j = i ; j = i++ ; D abord j = i ; puis i = i+1 ; j = --i ; D abord i = i-1 ; puis j = i ; j = i-- ; D abord j = i ; puis i = i-1 ; - Pré : L incrémentation/décrémentation est effectuée puis la variable est utilisée. - Post : L utilisation de la variable est effectuée avant l incrémentation/décrémentation. 2.4 Opérateurs d affectation - L élément à gauche du «=» se voit affecter la valeur retournée par l expression de droite. - Les conversions éventuelles sont prises en considération lors de l affectation. a = b = 0 ; a = b + (c=3) ; c=3 ; a = b + c ; a op= b ; a = a op b ; // Affectation combinée a += 3 ; a = a + 3 op : * / % + - << >> & ^

Chapitre 5 : Opérateurs, expressions et conversion 47 2.5 Opérateurs relationnels et booléens - Le résultat de la comparaison de deux expressions vaut : false (0) si le résultat de la comparaison est FAUX. true (1) si le résultat de la comparaison est VRAI. Type Opération Symbole Relationnel Inférieur que Supérieur que < > Inférieur que ou égal <= Supérieur que ou égal >= Égalité Égal == Logique Différent Négation (unaire) ET booléen OU booléen!=! && Chapitre 5 : Opérateurs, expressions et conversion 48 - Une expression est vraie si elle est non nulle. - Une expression est fausse si elle est égale à zéro. Déclaration et initialisation int a = -5, b=3, c=0 ; Expression Equivalence Valeur a + 5 && b ((a + 5) && b) false ou 0!(a < b) && c ((!(a < b)) && c) false ou 0 1 (a!= 7) (1 (a!= 7)) true ou 1 ((!(a < b)) && c) (a<b) (-5<3)? => vrai!(vrai) => faux c = 0 c a une valeur nulle => faux ((!(vrai)) && faux) => faux (false) Op1 Op2 Op1&&Op2 Op1 Op2!Op1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1

Chapitre 5 : Opérateurs, expressions et conversion 49 2.6 Opérateur de séquence - L opérateur de séquence est représenté par le symbole «,». - Il est le moins prioritaire dans la table des opérateurs. - Il permet d évaluer les différentes opérations dans l ordre. - Dans une liste d expressions séparées par «,», chaque expression est évaluée en premier avant de passer à la suivante qui se trouve à sa droite. a = (b=10, b+20) ; b=10 ; a=b+20=10+20=30 ; x = 10, i=2, z=3 ; Chapitre 5 : Opérateurs, expressions et conversion 50 2.7 Opérateur conditionnel - Il est appelé aussi opérateur ternaire. - Il prend comme opérandes 3 expressions. - La syntaxe de l opérateur conditionnel est comme suit : (expression1)? expression2 : expression3 ; - «expression1» est évaluée en premier. - Si «expression1» est vraie alors : «expression2» est évaluée. Le résultat est celui fourni par «expression2» - Si «expression1» est fausse alors : «expression3» est évaluée. Le résultat est fourni par «expression3». int a = -3 ; int n = (a < 0)? -a : a ; a = -3 < 0? vrai => n = -a = 3 ; Dans cet exemple, n est égale à la valeur absolue de a.

Chapitre 5 : Opérateurs, expressions et conversion 51 2.8 Opérateur de taille - L opérateur de taille est représenté par le mot clé réservé «sizeof». - Il permet de déterminer la taille en octets d une variable ou d un type ou d une expression. - Cette taille est calculée en fonction de l architecture interne de la machine. Déclaration et initialisation int a, b[10] ; Expression Valeur gcc sur windows sizeof(a) 4 (la taille d un int) sizeof(b) 40 (10 x la taille d un int = 40) sizeof(b[2]) 4 (la taille d un int) Chapitre 5 : Opérateurs, expressions et conversion 52 3. Conversions - Le langage C++ a deux types de conversion: implicite et explicite. 3.1 Conversions implicites - Les conversions implicites peuvent avoir lieu dans le calcul d une expression quand on passe directement un argument à une fonction ou lors du retour d une valeur par une fonction. - Ces conversions implicites facilitent la tâche du programmeur. - Cependant elles risquent d être potentiellement dangereuses si l on ne garde pas un œil ouvert. - En effet, elles peuvent générer des bogues lors de l exécution d un programme. Des bogues qui sont parfois difficiles à cerner pour le commun des mortels! - Les règles de conversion sont comme suit : Si l opérande est du type «char», «wchar_t», «short», «bool» ou «enum», elle est convertie en «int». Si l opérande est un nombre entier tellement grand que l on ne peut pas représenter par un «int», il sera représenté par un «unsigned int». Après ces deux premières étapes de conversion, si une expression contient un ensemble de types différents, la hiérarchie à suivre lors de la conversion est comme suit : «int» < «unsigned» < «long» < «unsigned long» < «float» < «double» < «long double». L opérande, ayant un type moins élevé dans la hiérarchie, est promue à un type plus élevé et l expression récupère ce type.

Chapitre 5 : Opérateurs, expressions et conversion 53 3.2 Conversions explicites - On peut demander explicitement une conversion d un opérande dans un type désiré. - Cette opération s appelle «casting» ou «transtypage». - Les règles de forçage de conversion de type du langage C peuvent être utilisées aussi en C++. Casts x = float(y) ; x = (float) y ; Commentaires Notation C++ Notation C, ok aussi en C++ - 4 nouveaux opérateurs ont été introduits en C++, pour forcer la conversion de type. Opérateurs Commentaires static_cast Cet opérateur est utilisé pour effectuer les opérations de conversion standard, par exemple, de int en float, un float en char etc. const_cast Cet opérateur permet uniquement la conversion de types const vers non const. reinterpret_cast Cet opérateur est utilisé essentiellement pour la conversion de types de relations différentes (non standard). dynamic_cast Cet opérateur est utilisé en programmation polymorphique où la conversion est différée au moment de l'exécution du programme. Chapitre 5 : Opérateurs, expressions et conversion 54 Opérations Commentaires double x = 5.89; int y = static_cast <int>(x); ANSI C++ : double vers int. double z = static_cast <double>(y); ANSI C++ : int vers double. int i = 7 ; float w = (float) i ; C w = float(i) ; C++ w = static_cast <float>(i) ; ANSI C++ char a = static_cast<char> ('B'+5.0) ; ANSI C++ Les opérateurs «const_cast», «reinterpret_cast» et «dynamic_cast» seront étudiés plus tard dans le cours.