Généralités, types de base, opérateurs et expressions c++

Généralités, types de base, opérateurs et expressions c++

Types de base

Les types de base sont ceux à partir desquels seront construits tous les autres, dits dérivés (il s’agira des types structurés comme les tableaux, les structures, les unions et les classes, ou d’autres types simples comme les pointeurs ou les énumérations). Il existe trois types entiers : short int (ou short), int et long int (ou long). Les limitations correspondantes dépendent de l’implémentation. On peut également définir des types entiers non signés : unsigned short int (ou unsigned short), unsigned int et unsigned long int (ou unsigned long). Ces derniers sont essentiellement destinés à la manipulation de motifs binaires. Les constantes entières peuvent être écrites en notation hexadécimale (comme 0xF54B) ou octale (comme 014). On peut ajouter le « suffixe » u pour un entier non signé et le suffixe l pour un entier de type long. Il existe trois types flottants : float, double et long double. La précision et le « domaine représentable » dépendent de l’implémentation. Le type « caractère » permet de manipuler des caractères codés sur un octet. Le code utilisé dépend de l’implémentation. Il existe trois types caractère : signed char, unsigned char et char (la norme ne précise pas s’il correspond à signed char ou unsigned char). Les constantes de type caractère, lorsqu’elles correspondent à des « caractères imprimables », se notent en plaçant le caractère correspondant entre apostrophes. Certains caractères disposent d’une représentation conventionnelle utilisant le caractère « \ » notamment ’\n’ qui désigne un saut de ligne. De même, ’\’’ représente le caractère ’ et ’\ »’ désigne le caractère « . On peut également utiliser la notation hexadécimale (comme dans ’\ x41’) ou octale (comme dans ’\07’). Le type bool permet de manipuler des « booléens ». Il dispose de deux constantes notées true et false

Les opérateurs arithmétiques et les opérateurs relationnels

Les opérateurs arithmétiques binaires (+, -, * et /) et les opérateurs relationnels ne sont définis que pour des opérandes d’un même type parmi : int, long int (et leurs variantes non signées), float, double et long double. Mais on peut constituer des expressions mixtes Catégorie Opérateurs Associativité Résolution de portée :: (portée globale – unaire) :: (portée de classe – binaire) <– –> Référence () [] -> . –> Unaire + – ++ — ! ~ * & sizeof cast dynamic_cast static_cast reinterpret_cast const_cast new new[] delete delete[] <— Sélection ->* .* <– Arithmétique * / % —> Arithmétique + – —> Décalage << >> —> Relationnels < <= > >= —> Relationnels == != —> Manipulation de bits & —> Manipulation de bits ^ —> Manipulation de bits | —> Logique && —> Logique || —> Conditionnel (ternaire) ? : —> Affectation = += -= *= /= %= &= ^= |= <<= >>= <— Séquentiel , —> exos_c++.book  (opérandes de types différents) ou contenant des opérandes d’autres types (bool, char et short), grâce à l’existence de deux sortes de conversions implicites : ■ les conversions d’ajustement de type, selon l’une des hiérarchies : int -> long -> float -> double -> long double unsinged int -> unsigned long -> float -> double -> long double ■ les promotions numériques, à savoir des conversions systématiques de char (avec ou sans attribut de signe), bool et short en int. Les opérateurs logiques Les opérateurs logiques && (et), || (ou) et (non) acceptent n’importe quel opérande numérique (entier ou flottant) ou pointeur, en considérant que tout opérande de valeur non nulle correspond à « faux » : Les deux opérateurs && et || sont « à court-circuit » : le second opérande n’est évalué que si la connaissance de sa valeur est indispensable. Opérateurs d’affectation L’opérande de gauche d’un opérateur d’affectation doit être une lvalue, c’est-à-dire la référence à quelque chose de modifiable. Les opérateurs d’affectation (=, -=, += …), appliqués à des valeurs de type numérique, provoquent la conversion de leur opérande de droite dans le type de leur opérande de gauche. Cette conversion « forcée » peut être « dégradante ». Opérande 1 Opérateur Opérande 2 Résultat 0 && 0 faux 0 && non nul faux non nul && 0 faux non nul && non nul vrai 0 || 0 faux 0 || non nul vrai non nul || 0 vrai non nul || non nul vrai !0 vrai ! non nul faux exos_c++.book Généralités, types de base, opérateurs et expressions

Opérateurs d’incrémentation et de décrémentation

Les opérateurs unaires d’incrémentation (++) et de décrémentation (–) agissent sur la valeur de leur unique opérande (qui doit être une lvalue) et fournissent la valeur après modification lorsqu’ils sont placés à gauche (comme dans ++n) ou avant modification lorsqu’ils sont placés à droite (comme dans n–). Opérateur de cast Il est possible de forcer la conversion d’une expression quelconque dans un type de son choix, grâce à l’opérateur dit de « cast ». Par exemple, si n et p sont des variables entières, l’expression : (double) n / p // ou : static_cast (n/p) aura comme valeur celle de l’expression entière n/p convertie en double. Opérateur conditionnel Cet opérateur ternaire fournit comme résultat la valeur de son deuxième opérande si la condition mentionnée en premier opérande est non nulle (vraie pour une expression booléenne), et la valeur de son troisième opérande dans le cas contraire. Par exemple, avec cette affectation : max = a>b ? a : b ; on obtiendra dans la variable max la valeur de a si la condition a>b est vraie, la valeur de b dans le cas contraire. Avec : valeur = 2*n-1 ? a : b ; on obtiendra dans la variable valeur la valeur de a si l’expression 2*n-1 est non nulle, la valeur de b dans le cas contraire. Exercice 1 a = x+5 /* expression 1 */ L’opérateur + est prioritaire sur l’opérateur d’affectation =. Énoncé Éliminer les parenthèses superflues dans les expressions suivantes : a = (x+5) /* expression 1 */ a = (x=y) + 2 /* expression 2 */ a = (x==y) /* expression 3 */ (a int, avant d’être ajouté à la valeur 3 (int). Le résultat 13 est de type int. 2. c est d’abord soumis à la conversion « systématique » char -> int (ce qui aboutit à la valeur 1), avant d’être ajouté à la valeur 1 (int). Le résultat 2 est de type int. 3. p est d’abord soumis à la conversion systématique short -> int, tandis que c est soumis à la conversion systématique char -> int ; les résultats sont alors additionnés pour aboutir à la valeur 11 de type int. 4. p et c sont d’abord soumis aux mêmes conversions systématiques que ci-dessus ; le résultat 35 est de type int.

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *