Были у нас такие времена, когда буквально приходилось экономить байты — памяти было мало. Крайне мало. По сегодняшним меркам — ноль. Поэтому от программиста требовалось не библиотеки устанавливать, но определять диапазон значений для своих переменных. И если значение переменной не могло выйти за пределы для какого-то типа, то этот тип и надо было использовать. А если у нас массив, то экономия была очень существенной. Отсюда взялся весь зоопарк целочисленных типов: 1, 2, 4, 8 байт, знаковые и беззнаковые. Кроме того, сами процессоры могли не обеспечивать работы с каким-то типом напрямую и операции надо было эмулировать, что ещё и вычислительные ресурсы отжирало. Зачем нам хранить нули? Даже в современной ситуации, когда память практически бесконечна, сэкономить пару сотен гигабайт данных на больших объёмах — уже неплохо.