: type, conversion et priorités Delannoy chap2 (partiel) chap3 (partiel) Objectifs: determiner la valeur et le type d'une expression appliquer les mécanismes de conversion de types appliquer les priorités et l'associativité S3 3a 1/20 S3 3a 2/20 Rappel ICC : Terminologie Définition d'une expression Un algorithme travaille sur des données qu il utilise et/ou modifie. Une donnée nommée est ce que l on appelle une variable dans un algorithme. opérateur Opérations élémentaires Construite avec 0, 1 ou plusieurs opérateurs agissant sur un ou plusieurs opérandes delta donnée nommée (variable) b^2-4*a*c opérande Possède un type et une valeur opérateur Opérations élémentaires Equivalence en Langage C: c'est tout? delta = b*b - 4*a*c donnée nommée (variable) opérande int a, b ; opérateur de la division a / b est une expression opérande opérande La valeur de l'expression int (division entière) S3 3a 3/20 S3 3a 4/20
Opérateurs arithmétiques Circuit spécialisé réalisant chaque opération Sur des opérandes de même types Produit un résultat du même type que les opérandes c/d c=3.; d=2.; int a=3; int b=2; a/b S3 3a 6/20 S3 3a 7/20 Les opérateurs arithmétiques (2) + - * / % L'opérateur modulo, noté % ne travaille qu'avec des opérandes de type entier int a = 11, b = 4 ; a / b quotient de la division entière, valeur = a % b reste de la division entière, valeur = Règles de conversions Variantes du type int type abrégé en TP sizeof(type) short int short 2 octets long int long 4 octets unsigned int unsigned 4 octets pour représenter seulement des entier positifs l'opérateur sizeof(... ) s'applique sur un type ou une expression dont il détermine le type. il calcule le nombre de char (= nb d'octet) utilisé pour ce type. ex: sizeof(33) donne : 4 C99, nouveaux types avec <stdint.h> : intn_t, uintn_t, avec N = 8, 16, 32, 64 S3 3a 8/20 S3 3a 9/20
Règles de conversions 1. char et short sont automatiquement converti en int Hiérarchie des types 2. Opérandes de types différent? int < long < < double < long double Remarque : Force d'un type = domaine couvert (vu en sem 6) facile à retenir: 1) nb d'octets, 2) nb entier < nb à virgule Règle : Le type faible est converti dans le type fort int a=5; b=2.; int n ; long p ; x ; (n * p) + x long long a/b S3 3a 10/20 S3 3a 11/20 niveaux de priorités des opérateurs 45 opérateurs 15 niveaux de priorités Delannoy p 48 Associativité: pour les opérateurs de même priorité Gauche >Droite / Left to Right Droite >Gauche / Right to Left S3 3a 12/20
Opérateurs arithmétiques associativité et usage des parenthèses a - b + c a + b % c est évalué comme (a - b)+c est évalué comme a + (b%c) Les parenthèses permettent de forcer l'ordre d'évaluation (a + b)% c l'addition est évaluée en premier S3 3a 15/20 S3 3a 16/20 Opérateurs d'affectation associativité droite > Gauche = += -= *= /= %= conversion automatique dans le type à gauche de l'opérateur: int n ; x = 1.9 ; n = x ; // n reçoit 1 z, total = 3.5 ; int y ; 4.5 4. 4 z = y = total + 1 ; // perte de la partie fractionnaire! int w = 3; w += 4 ; // équivalent à w = w + 4 ; Opérateurs d'incrémentation/décrémentation note: risques d'erreurs dans une expression avec affectation Très utilisé pour le contrôle d'itération avec des compteurs post- i++ ou pré- ++i Différence entre post- / pré- dans une expression avec = Action en deux étapes, exemple sur la post-incrémentation: 1) Usage de la valeur actuelle de l opérande dans l expression 2) Puis incrémentation de la valeur de l opérande en mémoire int a=3,b; a++ ++a b = a++ La valeur de a est augmentée d'une unité dans tous les cas b reçoit la valeur 3 b = ++a b reçoit la valeur 4 S3 3a 17/20 S3 3a 18/20
Opérateur de cast : (type)opérande change le type de son opérande Priorité très élevée mais moins que les parenthèses Le type de l expression est type La valeur est celle de l opérande convertie en type int n = 7, p = 2 ; déterminer le type et la valeur des expressions: (double) n Résumé conversion automatique de char en int conversion automatique quand il y a affectation conversion dans les expressions selon la force des types le langage C offre 45 opérateur répartis sur 15 niveaux de priorité (voir Delannoy p 48). on peut utiliser des parenthèses pour forcer le calcul de sous-expressions. (double) (n/p) (double) n/p ce chapitre vous permet de maîtriser l'écriture d'expressions arithmétiques S3 3a 19/20 S3 3a 20/20