Types primitifs

Entiers non signés

Les types entiers non signés (comme unsigned int, unsigned long, unsigned char etc.) sur n bits permettent de stocker des valeurs entières entre 0 et \(2^{n} - 1\).

TypeNombre de bits
int32
char8
short16
long32 ou 64
long long64
  • Quelles sont les valeurs possibles pour un unsigned char ? Entre \(0\) et \(2^{8}-1\) autrement dit entre 0 et 255.

Entiers signés

Les types entiers signés (comme int, long, char etc.) sur n bits permettent de stocker des valeurs entières entre \(-2^{n-1}\) et \(2^{n-1}-1\). Par défaut les types entiers sont signés, sauf char qui est souvent non signé, mais pas toujours.

  • Quelles sont les valeurs possibles pour un signed char ? Entre \(-2^{7}\) et \(2^{7}-1\) autrement dit entre Entre -128 et 127.

  • Quelles sont les valeurs possibles pour un char ? Généralement, entre \(0\) et \(2^{8}-1\) autrement dit entre Entre 0 et 255. En effet, char est non signé par défaut.

  • Pour quelle raison char est-il non signé par défaut ?Pour faire le lien avec les caractères ASCII (nombres entre 0 et 127) puis ISO-8859-1 qui associe des caractères comme é, è etc. à des nombres entre 128 et 255. Il y a d'autres codages comme Windows-1252.

Représentations

Octale

En ajoutant le symbole 0, on écrit un nombre entier en représentation octale : 02322

  • Combien vaut 051 ? 5×8 + 1 = 41 (quarante et un).

hexadécimale

Avec 0x, pareil mais c'est en hexadécimal : 0x4D2.

  • Combien vaut 051 ? 5×16 + 1 = 81 (quatre-vingt un).

Nombres flottants

Il n'y a pas de nombres flottants non signés.

TypeNombre de bitsExemples
float3212.34F
double6412.34, 12.e-4
long double80 ou 12812.34L

Conversions

Implicites

On convertit de int à float

float x = 1;

Explicites avec cast

L'inverse, convertir n'est pas automatique, il faut "caster" :

float x = ((float) 2) / 3;
  • Comment vaut 2/3 ? 0 car / sur des entiers est la division euclidienne en C.
  • Comment vaut ((float) 2) / 3 ? 0.666666... car / sur des floats est la division euclidienne en C.