Соотношение между длиной слова, размером символа, целым размером и байтом - PullRequest
0 голосов
/ 30 марта 2009

Какова связь между длиной слова, размером символа, целым размером и байтом в C ++?

Ответы [ 6 ]

7 голосов
/ 30 марта 2009

Стандарт требует, чтобы определенные типы имели размеры минимум (short - не менее 16 бит, int - не менее 16 бит и т. Д.), А некоторые группы типов упорядочены (sizeof(int)> = sizeof(short)> = sizeof(char)).

5 голосов
/ 30 марта 2009

В C ++ символ должен быть достаточно большим, чтобы содержать любой символ в базовом наборе символов реализации.

int имеет «натуральный размер, предложенный архитектурой среды выполнения». Обратите внимание, что это означает, что тип int , а не должен иметь размер не менее 32 бит. Реализации, где int - это 16 бит, являются общими (представьте, что они встроены в MS-DOS).

Из различных частей стандартов C ++ 98 и C99 взято следующее:

  • long int должно быть не меньше int
  • int должно быть не меньше short
  • short должно быть не меньше char

Обратите внимание, что все они могут быть одинакового размера.

Также (при условии реализации в два дополнения):

  • long int должно быть не менее 32 бит
  • int должно быть не менее 16 бит
  • short должно быть не менее 16 бит
  • char должно быть не менее 8 бит
4 голосов
/ 30 марта 2009

Стандарт не знает этого слова, используемого процессорами. Но он говорит, что тип "int" должен иметь естественный размер для среды выполнения. Но даже для 64-битных сред int обычно всего 32 бита. Таким образом, «слово» в стандартных терминах практически не имеет общего значения (кроме общепринятого английского слова «конечно»).

Размер символа - это размер символа. Зависит от того, о каком персонаже вы говорите. Типы символов: символ, символ без знака и символ со знаком. Также wchar_t используется для хранения символов, которые могут иметь любой размер (определяется реализацией - но должны использовать один из целочисленных типов в качестве базового типа. Очень похоже на перечисления), в то время как char / Signar Char или unsigned char должен иметь один байт. Это означает, что один байт имеет столько же бит, сколько один символ. Если реализация говорит, что один объект типа char имеет 16 битов, то байт также имеет 16 битов.

Теперь байт - это размер, который занимает один символ. Это единица, а не какой-то конкретный тип. В этом нет ничего особенного, только то, что вы можете получить доступ к памяти. Т.е. у вас нет доступа указателя к битовым полям, но у вас есть доступ к блокам, начинающимся с одного байта.

«Целочисленный размер» теперь довольно широк. Что вы имеете в виду? Все bool, char, short, int, long и их неопубликованные аналоги являются целыми числами. Их диапазон - это то, что я бы назвал «целочисленным размером», и он задокументирован в стандарте C - принят стандартом C ++. Для знакового символа диапазон составляет от -127 <-> 127, для short и int он одинаков и равен -2 ^ 15 + 1 <-> 2 ^ 15-1, а для длинных - -2 ^ 31 + 1 < -> 2 ^ 31-1. Их числа без знака варьируются от 0 до 2 ^ 8-1, 2 ^ 16-1 и 2 ^ 32-1 соответственно. Это, однако, минимальные размеры. То есть, int не может иметь максимальный размер 2 ^ 14 на любой платформе, потому что это, конечно, меньше 2 ^ 15-1. Из этих значений следует, что требуется минимум битов. Для char это 8, для short / int это 16 и long для 32. Представление с добавлением двух для отрицательных чисел не требуется, поэтому отрицательное значение не -128 вместо -127, например, для подписанный символ.

3 голосов
/ 30 марта 2009

Стандартный C ++ не имеет тип данных с именем word или byte. Остальные четко определены как диапазоны. База - это char, которая имеет CHAR_BITS бит. Наиболее часто используемое значение CHAR_BITS равно 8.

1 голос
/ 30 марта 2009

sizeof (char) == 1 (один байт) (в C ++, в C - не указано)
sizeof (int)> = sizeof (char)
слово - не тип c ++, обычно в компьютерной архитектуре это означает 2 байта

0 голосов
/ 30 марта 2009

Вид зависит от того, что вы подразумеваете под отношением. Размер числовых типов обычно кратен размеру машинного слова. Байт - это байт, это байт - 8 бит, не больше, не меньше. Символ определен в стандарте как один беззнаковый байт, который я считаю (проверьте ARM для деталей).

Общее правило: не делайте предположений о фактическом размере типов данных. Стандарт определяет отношения между типами, такими как «длинное» целое число, которое будет либо того же размера, либо больше, чем «int». Отдельные реализации языка будут выбирать конкретные размеры для удобных для них типов. Например, компилятор для 64-разрядного процессора будет выбирать размеры, отличные от компилятора для 32-разрядного процессора.

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

...