====== Les types ====== ===== Les booléens ===== Python a un type ''%%bool%%'' avec les valeurs ''%%False%%'' et ''%%True%%''. **C** permet de faire des calculs de types booléens mais n'a pas de type booléen à proprement dit. On utilise un entier. La convention habituelle est que ''%%0%%'' est interprété comme **faux** et tout autre valeur est interprétée comme **vrai**. ===== Les entiers ===== ==== Python ==== En Python, on n'a que le type ''%%int%%'', codé sur 4 octets. Un entier Python peut donc aller de -2147483648 à 2147483647. Mais si le nombre devient plus grand, Python s'arrange de sorte que la taille de l'entier est en fait illimitée ! > il y avait autrefois un type ''%%long%%'' pour les grands entiers, mais ce type a été intégré au type ''%%int%%'' de sorte qu'on n'a plus aucune question à se poser, tout se fait automatiquement. Calculer ''%%2**100%%'' ne pose aucun problème et Python donne sans complexe le résultat ''%%1267650600228229401496703205376%%'' Bien sûr, les calculs deviennent beaucoup plus lents quand on passe sur des grands entiers et utiliser cela sur un petit microcontrôleur serait trop gourmand en calculs. ==== C ==== En C, la logique n'est pas la même : On veut contrôler finement ce que fait la machine et son utilisation de la mémoire. On dispose donc de différents types, selon les besoin. On dispose des types suivants : * ''%%char%%'' pour un entier signé entre -128 et 127. Ce type est aussi utilisé pour les caractères comme on le verra dans la partie sur les chaînes de caractères. Utilise 1 octet. * ''%%short%%'', entier court sur 2 octets, de -32768 à 32767 * ''%%int%%'', identique à ''%%short%%''. C'est le type de base que l'on utilise quand on n'a pas de contraintes particulières. Quand on travaille sur un ordinateur sur lequel on dispose de ressources largement suffisantes, on ne s'embête pas à utiliser ''%%char%%''. * ''%%long%%'', sur 4 octets, de -2147483648 à 2147483647. Comme le ''%%int%%'' de base sur Python. On a la possibilité de préciser que l'on veut un type sans signe : * ''%%unsigned char%%'' pour un entier signé entre 0 et 255. Ce type est aussi utilisé pour les caractères comme on le verra dans la partie sur les chaînes de caractères. Utilise 1 octet. * ''%%unsigned short%%'', entier court sur 2 octets, de 0 à 65535 * ''%%unsigned int%%'', identique à ''%%unsigned short%%''. * ''%%unsigned long%%'', sur 4 octets, de 0 à 4294967295. **Important :** en C, quand on est **débutant** et que l'on fait des programmes **simples** sur un ordinateur, on se contente d'utiliser le type ''%%int%%'' sans chercher plus loin. ===== Les réels ===== **Python** connaît le type ''%%float%%'' soit un nombre codé en virgule flottante sur 64 bits. **C** a également un type ''%%float%%'' mais le codage n'est que sur 32 bits (on parle de simple précision) Tout comme pour le ''%%int%%'', sur ordinateur, si on n'a pas de contrainte particulière, on passe directement à la **double précision**, c'est à dire au type ''%%double%%'' codé sur 64 bits. Les fonctions de la bibliothèque ''%%%%'' comme ''%%cos%%'', ''%%sqrt%%'', ''%%pow%%'', renvoient un ''%%double%%''. > Au besoin, il existe une variante en version ''%%float%%'', mais encore une fois, on a plus vite fait d'utiliser directement ''%%double%%''. Il faut être dans un cas avec des contraintes spéciales pour qu'il y ait un intérêt à utiliser ''%%float%%''. Bref, en Python ''%%float%%'' et en C ''%%double%%''. ===== Les complexes ===== Python gère nativement les nombres complexes ! z = complexe(3,1) # crée le complexe 3 + i z**2 # fait le calcul et renvoie 8 + 6i Évidemment, en C c'est toujours possible mais pas nativement, il faut charger une bibliothèque exprès. > Je sais, ça a l'air d'être de la publicité pour Python ! > > C est évidemment un langage très utilisé et très important. J'essaie simplement de faire comprendre que si on utilise beaucoup Python, c'est parce qu'il a l'avantage d'une très grande simplicité. C permet de faire ce que l'on veut mais il demande beaucoup plus d'investissement. ===== Les chaînes de caractères ===== **Python** utilise le type ''%%str%%''. En **C**, c'est beaucoup moins évident. Voir le document sur les [[.:strings|chaînes de caractères]] pour s'en convaincre.