Le mot-clé désignant les caractères est char. Un objet de ce type doit pouvoir contenir le code de n'importe quel caractère de l'ensemble des caractères utilisé sur la machine. Le codage des caractères n'est pas défini par le langage : c'est un choix d'implémentation. Cependant, dans la grande majorité des cas, le code utilisé est le code dit ASCII, ou un surensemble comme par exemple la norme ISO-8859.
Les attributs de précision sont short et long. Du point de vue de la précision, on peut avoir trois types d'entiers : short int, int et long int. Les int sont implémentés sur ce qui est un mot << naturel >> de la machine. Les long int sont implémentés si possible plus grands que les int, sinon comme des int. Les short int sont implémentés si possible plus courts que les int, sinon comme des int. Les implémentations classiques mettent les short int sur 16 bits, les long int sur 32 bits, et les int sur 16 ou 32 bits selon ce qui est le plus efficace.
L'attribut de représentation est unsigned. Du point de vue de la représentation, on peut avoir deux types d'entiers : int et unsigned int. Les int permettent de contenir des entiers signés, très généralement en représentation en complément à 2, bien que cela ne soit pas imposé par le langage. Les unsigned int permettent de contenir des entiers non signés en représentation binaire.
On peut combiner attribut de précision et attribut de représentation et avoir par exemple un unsigned long int. En résumé, on dispose donc de six types d'entiers : int, short int, long int (tous trois signés) et unsigned int, unsigned short int et unsigned long int.