Почему все типы данных четные числа?
======================================

 Например в C#  

byte: хранит целое число от 0 до 255 и занимает 1 байт.  

ushort: хранит целое число от 0 до 65535 и занимает 2 байта.  

uint: хранит целое число от 0 до 4294967295 и занимает 4 байта.  

---  

Если нам понадобится число 65536, то ushort не хватит 1 бита. И мы будем использовать uint.  

"Эффективно" мы будем использовать только 1 байт. Его бит, которого нам так не хватало. Второй байт нам не нужен.  

  

Логично, чтобы был тип данных 3 байта. Но такого типа данных нет. Но есть 4, 8, 16.  

И для числа в "8 байт+1бит" мы вынуждены использовать 16 байт. Хотя могли бы 9.  

  

И мы так и делаем, и это считается нормой. Других вариантов нет.  

В тоже время, когда для "числа" 255 задают тип ushort, это считается неверным. Лишняя трата ресурсов/памяти. Да и не логично и путает программиста.  

  

Почему все типы данных четные числа? 

 Причин для этого множество и не последнюю роль в этом играют требования (или рекомендации) выравнивания данных в памяти. Из соображений производительности на многих (или даже на большинстве) современных платформах данные должны хранится в памяти на границе, кратной степени двойки. Поэтому даже если вы изобретете тип, состоящий их 3 байтов, все равно по соображениям выравнивания вам придется хранить данные этого типа на 4-байтовой адресной границе, тем самым фактически теряя каждый четвертый байт впустую. В такой ситуации нет смысла заводить 3-байтовый тип, если его можно сразу фактически "бесплатно" сделать 4-байтовым.  

  

В ситуациях (или на платформах), где соображения тщательной экономии памяти являются более важными, чем соображения производительности, ваши аргументы будут более вескими. И для таких ситуаций многие языки программирования предоставляют средства для реализации именно таких более компактных типов. 

 Потому что ненапасешься типов данных под каждую ситуацию. Надо вам 3 байта - делайте массив трех байт.  

  

Плюс все это проецируется таки в регистры процессора, кеш и прочее. И int в регистр пройдет со свистом, в отличие от вашего 5-байтного типа данных. Вот и оптимизируют железо (читай даже - разрабатывают) под фиксированные размерности. 

 Размер слова в проце всегда четный