Если мы говорим оригинальный языковой дизайн, помните, что C получил большую часть своей нынешней формы на процессоре PDP-11, который является 16-битным. Таким образом, у них были целые числа для арифметики и символы для хранения строк. Указатели в основном совпадали с целыми числами.
Язык был очень прагматичным и только позже получил более формальный и сложный синтаксис. Так что ответ таков. Намного позже мы получили 32-битные и 64-битные процессоры и необходимость различать целые числа различной длины.
До сегодняшнего дня я кодирую почти все свои программы на Си, как будто не было другого типа, кроме char и integer. О, кстати, "char" в C может быть как подписанным, так и неподписанным в соответствии со стандартом. Это отражает то, что символы были предназначены для хранения символов (строки) и целые числа для арифметики.
Чтобы уточнить, (спасибо, semaj), компилятор может выбрать обработку переменной, объявленной как "char", как "unsigned char". Это не происходит для "Int". «Int» всегда подписывается, но с символами вы не можете быть уверены. Вы должны предположить, что у символа может быть либо беззнаковая, либо подписанная арифметика. Это оптимизация скорости для размещения процессоров, которые работают быстрее с любой реализацией. То есть акцент делается на символы как контейнеры для хранения, а не как арифметический тип. (Это название также является поддавкой. Его можно было назвать «коротким» или «маленьким», но по какой-то причине называли «char»).