В С99 расширены правила продвижения целых типов. В С89 значение типа char, short int или битового поля int можно было использовать в выражении вместо int или unsigned int. Если продвинутое значение помещалось в int, то продвижение выполнялось до int; в противном же случае первоначальное значение продвигалось до unsigned int.
В С99 каждому целому типу присвоен ранг. Например, ранг long long int выше, чем ранг int, который в свою очередь выше, чем ранг char и так далее. В выражении любой целый тип, ранг которого ниже, чем ранг int или unsigned int, может использоваться вместо int или unsigned int.