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

Например в 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, это считается неверным. Лишняя трата ресурсов/памяти. Да и не логично и путает программиста.

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

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

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
MotionRay Москва
от 3 000 $
Бранд-Мастер Санкт-Петербург
от 70 000 до 100 000 ₽
OnederX Москва
от 100 000 до 120 000 ₽
23 сент. 2020, в 06:18
20000 руб./за проект
23 сент. 2020, в 06:11
2000 руб./за проект
23 сент. 2020, в 00:43
40000 руб./за проект