Подтвердить что ты не робот

Из int, char, float и bool, что является наименьшим?

Ниже приведен тест программирования "заполнение дома", который является частью прикладного процесса для MSc в разработке игр в британском университете:

Основы С++

Если программа объявила четыре переменные, один из типов int, один из типов float, один из типов char и один из типов bool, какая переменная будет занимать наименьшее пространство в памяти?

  • ИНТ
  • char
  • поплавок
  • BOOL

В соответствии с инструкциями есть только одно истинное утверждение. Однако моя книга на С++ (С++ Pocket Reference, O'Reilly) гласит: "Типичный размер bool - один байт" и "Размер char - один байт. Технически размер байта определяется реализацией, но редко бывает ничего, кроме восьми бит."

Я что-то не понимаю? Какой ответ вы бы поставили и почему?

4b9b3361

Ответ 1

Нет типа принимает меньше, чем char, потому что по определению sizeof(char) == 1. Однако вполне возможно, что все типы занимают одинаковое пространство.

(Представление каждого типа с 16 битами (с подходящим необычным форматом с плавающей запятой) было бы достаточным для удовлетворения стандартных требований диапазона значений: реальное оборудование, в котором каждый тип имеет 32 бита.)

Ответ 2

Если программа объявила четыре переменные, один из типов int, один из типов float, один из типов char и один из типа bool, какая переменная заняла бы наименьшее пространство в памяти?

Реальная проблема с вопросом, который вы опубликовали, лежит в этих словах:

occupy ... space in memory

Если предполагается интерпретация, то в большинстве случаев вы принимаете один из популярных популярных компиляторов, и в этом случае ответ 2 и 4 будут занимать наименьшее пространство в памяти. Просто потому, что текущие популярные компиляторы делают char и bool занимают один байт в памяти...

Как указано в комментариях, sizeof() is of type size_t, который является целым.

Как sizeof(char) == 1 всегда истинно в соответствии со стандартом, а значение является интегральным; никакая другая sizeof(T) не может быть меньше 1. Но любой другой T, чем char может быть больше, чем 1, зависящий от реализации. Поскольку вы не можете предположить, что sizeof(char) == sizeof(bool) всегда выполняется, вы можете хотя бы предположить, что sizeof(char) <= sizeof(bool) имеет значение.

Что делает sizeof(char) наименее правильным ответом...

Ответ 3

Ответ char. Нет другого ответа.

(Хотя я согласен, вопрос должен был быть сформулирован лучше).

Стандарт С++ 03 $5.3.3/1 гласит:

sizeof (char), sizeof (подпись char) и sizeof (без знака char) равны 1; результат sizeof, примененный к любому другому фундаментальному типу (3.9.1), является реализации. [Примечание: в частности, sizeof (bool) и sizeof (wchar_t) определены реализацией .69)

(Нашел эту информацию с другого вопроса: Почему sizeof (bool) не определен как один, самим стандартом?).

Учитывая, что минимальный размер равен 1 (sizeof должен возвращать интегральные значения), это означает, что в любой реализации, следующей за стандартами, будет следовать следующее:

sizeof(char) == 1
sizeof(bool) >= 1
sizeof(int) >= 1
sizeof(float) >= 1

Вопрос был плохо сформулирован и, вероятно, следовало спросить более четко: "... какая переменная обязательно занимает больше места в памяти, чем любая другая (в любой корректной реализации С++)?

Ответ 4

Язык не задает никаких отношений между этими размерами типа, которые гарантируют правильный ответ на этот вопрос как поставленный. Например, они могут быть 32-битными типами.

Ответ 6

Стандарт С++ дает следующие отношения:

sizeof(char) == 1
sizeof(char) <= sizeof(int) <= sizeof(long)
sizeof(float) <= sizeof(double)

...

Ответ 7

Нет гарантии точного размера этих типов, но есть гарантия, что char не больше короткого, а короткий - не длиннее.

Итак, char всегда будет занимать наименьший объем памяти, но, возможно, это не единственный. Он по-прежнему гарантирует, что ничего больше не будет иметь меньшего размера.

Однако может быть исключение с bool на некоторых специальных встроенных микроконтроллерах. Они могут иметь переменную bit, которая занимает ровно один бит, однако они не находятся в ОЗУ, а в специальных регистрах.

Однако, если ваша архитектура и компилятор особенно странны или необычны, вы можете разумно ожидать, что char равно 1, short равно 2, long равно 4, long long равно 8, а int - либо 2 или 4, но обычно 4 байта.

Ответ 9

Правильный ответ логичен в теории, так как char требует знания не менее 8 бит, тогда как bool технически требует только один бит. вы могли бы разбить 8 bools внутри одного char, если хотите теоретически.

Ответ 10

типичный размер bool - один байт. не означает, что всегда - один байт. Вопрос либо относится к реализации, которая не имеет размер в один байт bool, либо подразумевает, что только одна переменная имеет наименьший размер.