байты, но байты не обязательно являются октетами). Потому что именно так их определяет Стандарт.

я стандарт C ++, я всегда понимал, что размеры интегральных фундаментальных типов в C ++ были следующими:

sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)

Я вывел это из 3.9.1 / 2:

Существует четыре типа целых чисел со знаком: «знаковый символ», «короткое целое», «int» и «длинное целое». В этом списке каждый тип обеспечивает как минимум столько же памяти, сколько предшествует ему в списке. Простые целые имеют естественный размер, предложенный архитектурой среды исполнения

Далее размерchar описывается в 3.9.1 / как:

[...] достаточно большой, чтобы хранить любой элемент базового набора символов реализации.

1.7 / 1 определяет это в более конкретных терминах:

Фундаментальным хранилищем в модели памяти C ++ является байт. Байт, по крайней мере, достаточно большой, чтобы содержать любой элемент базового набора символов выполнения, и состоит из непрерывной последовательности битов, число которых определяется реализацией.

Это приводит меня к следующему выводу:

1 == sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)

гдеsizeof говорит нам, сколько байтов тип. Кроме того, это определяется реализацией, сколько битов в байте. Большинство из нас, вероятно, привыкли иметь дело с 8-битными байтами, но Стандарт говорит, что естьn биты в байте.

Вэта почтаАльф П. Штейнбах говорит:

long гарантируется (как минимум) 32 бита.

Это противоречит всему, что, как я понимаю, соответствует размеру основных типов в C ++ в соответствии со Стандартом. Обычно я просто игнорировал бы это утверждение, поскольку новичок ошибался, но, поскольку это был Альф, я решил, что его стоит продолжить.

Итак, что вы говорите? Гарантируется ли стандарт длиной не менее 32 бит? Если это так, пожалуйста, уточните, как предоставляется эта гарантия. Я просто не вижу этого.

Стандарт C ++, в частности, гласит, что для того, чтобы знать C ++, вы должны знать C (1.2 / 1)1

Стандарт C ++ неявно определяет минимальный предел значенийlong можно разместить, чтобы бытьLONG_MIN-LONG_MAX 2

Так что независимо от того, насколько большойlong это должно быть достаточно большим, чтобы держать LONG_MIN в LONG_MAX.

Но Альф и другиеконкретный что long должен быть не менее 32 бит. Это то, что я пытаюсь установить. Стандарт C ++ явно указывает, что число битов в байте не указано (это может быть 4, 8, 16, 42). Так как же получается соединение, способное вместить числа?LONG_MIN-LONG_MAX быть не менее 32 бит?

(1) 1.2 / 1: Следующие ссылочные документы необходимы для применения этого документа. Для датированных ссылок применимо только указанное издание. Для недатированных ссылок применяется самое последнее издание ссылочного документа (включая любые изменения).

ISO / IEC 2382 (все части), Информационные технологии. СловарьISO / IEC 9899: 1999, Языки программирования - CISO / IEC 10646-1: 2000, Информационные технологии. Универсальный многооктетный набор кодированных символов (UCS). Часть 1. Архитектура и базовая многоязычная плоскость

(2) Определено в<climits> как:

LONG_MIN -2147483647 // -(2^31 - 1)
LONG_MAX +2147483647 //   2^31 - 1

Ответы на вопрос(5)

Ваш ответ на вопрос