Opérateurs sur les entiers
Il existe 5 opérations sur les entiers. Ce sont + (addition), – (soustraction), * (produit), / (division), % (reste de la division). Si vous ne mettez pas de parenthèses, * et / ont une priorité supérieure à + et -. Attention, pour les multiplications l’étoile est obligatoire (a*b et pas ab). Le résultat de ces opérations est toujours du même type que ces deux arguments, quand ils ont du même type (s’ils sont d’un type différent, voir plus loin). Donc 11/3 donnera 3, et pas 3,6666. 11%3 donnera 2. C’est comme à l’école primaire : 11 divisé par 3 donne 3 reste 2.
Les flottants
En informatique, on n’arrive pas à gérer tous les nombres réels. On ne peut que les approximer par une suite finie de chiffres. En fait l’ordinateur gère les réels avec une méthode proche de la notation scientifique : 123,45 = 1,2345 102 (noté 1.2345E2 en C). Ce qui différenciera donc les types de nombres réels sera le nombre de chiffres significatifs pris en compte. Attention, l’ordinateur utilise des chiffres en binaire, c’est pourquoi l’indication d’un nombre de chiffres en décimal sera approximative. Il existe trois types de réels, les float (jusqu’à 1,7E38 mais avec uniquement 7 chiffres décimaux significatifs), les long float ou double (jusqu’à plus de 1E300, avec 15 chiffres significatifs, et les long double (non normalisés) encore plus précis.
Les 4 opérations possibles sont +, -, *, / (ici la division donnera un flottant, il n’y a pas de reste).
Le cast
Lorsque, dans une expression, les deux opérandes sont de type différent (mais numérique évidement), le compilateur prévoit une conversion implicite (vous ne l’avez pas demandée mais il la fait néanmoins) suivant l’ordre : { char -> short -> long -> float -> double } et { signed -> unsigned }. le « plus petit » est automatiquement transformé dans le type du « plus grand », le résultat de l’opération sera lui aussi du type du plus grand. Par contre, le cast n’est appliqué automatiquement que si c’est nécessaire : si un opérateur est entouré de short, l’opération est faite sur des short, le résultat (short) pouvant toujours être transformé plus tard si nécessaire.
Pour forcer un cast, il suffit d’indiquer le type désiré entre parenthèses, devant la valeur à transformer (comme vous placez le signe – devant un nombre pour lequel vous désirez changer le signe). Exemple : (float)3 vaut 3 en flottant (vous pouviez aussi directement écrire 3.0). Vous pouvez également forcer un cast vers un type « plus petit » : dans ce cas là il y a risque de perte d’information. Exemple : (int)3.9 donnera 3 (partie entière), (unsigned char)256 donnera 0 (j’ai déjà dit qu’après le dernier il repassait à 0).