Unsigned short int размер

Компиляторы C++ Microsoft 32-bit и 64-bit распознают типы в таблице далее в этой статье. The Microsoft C++ 32-bit and 64-bit compilers recognize the types in the table later in this article.

int ( unsigned int ) int ( unsigned int )

__int8 ( unsigned __int8 ) __int8 ( unsigned __int8 )

__int16 ( unsigned __int16 ) __int16 ( unsigned __int16 )

__int32 ( unsigned __int32 ) __int32 ( unsigned __int32 )

__int64 ( unsigned __int64 ) __int64 ( unsigned __int64 )

short ( unsigned short ) short ( unsigned short )

long ( unsigned long ) long ( unsigned long )

long long ( unsigned long long ) long long ( unsigned long long )

Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным. If its name begins with two underscores ( __ ), a data type is non-standard.

Диапазоны, представленные в следующей таблице, включают указанные значения. The ranges that are specified in the following table are inclusive-inclusive.

Имя типа Type Name Байт Bytes Другие имена Other Names Диапазон значений Range of Values
int int 4 4 signed signed От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647
unsigned int unsigned int 4 4 unsigned unsigned От 0 до 4 294 967 295 0 to 4,294,967,295
__int8 __int8 1 1 char char От -128 до 127 -128 to 127
неподписанный __int8 unsigned __int8 1 1 unsigned char unsigned char От 0 до 255 0 to 255
__int16 __int16 2 2 Short, короткое целое, короткое целое число со знаком short, short int, signed short int От -32 768 до 32 767 -32,768 to 32,767
неподписанный __int16 unsigned __int16 2 2 короткое число без знака, короткое целое без знака unsigned short, unsigned short int От 0 до 65 535 0 to 65,535
__int32 __int32 4 4 со знаком, целое число со знаком, целое число signed, signed int, int От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647
неподписанный __int32 unsigned __int32 4 4 Неподписанное целое число без знака unsigned, unsigned int От 0 до 4 294 967 295 0 to 4,294,967,295
__int64 __int64 8 8 длинный длинный знак Long long long, signed long long От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned __int64 unsigned __int64 8 8 длинное целое без знака unsigned long long От 0 до 18 446 744 073 709 551 615 0 to 18,446,744,073,709,551,615
bool bool 1 1 Нет none false или true false or true
char char 1 1 Нет none от-128 до 127 по умолчанию -128 to 127 by default

При компиляции при помощи /J — от 0 до 255 0 to 255 when compiled by using /J

знак со знаком signed char 1 1 Нет none От -128 до 127 -128 to 127 unsigned char unsigned char 1 1 Нет none От 0 до 255 0 to 255 short short 2 2 короткое целое, короткое целое со знаком short int, signed short int От -32 768 до 32 767 -32,768 to 32,767 unsigned short unsigned short 2 2 unsigned short int unsigned short int От 0 до 65 535 0 to 65,535 long long 4 4 long int, длинное целое число со знаком long int, signed long int От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647 unsigned long unsigned long 4 4 unsigned long int unsigned long int От 0 до 4 294 967 295 0 to 4,294,967,295 long long long long 8 8 нет (но эквивалентно __int64) none (but equivalent to __int64) От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 длинное целое без знака unsigned long long 8 8 нет (но эквивалентно неподписанному __int64) none (but equivalent to unsigned __int64) От 0 до 18 446 744 073 709 551 615 0 to 18,446,744,073,709,551,615 enum enum Возможны разные варианты varies Нет none float float 4 4 Нет none 3,4E +/- 38 (7 знаков) 3.4E +/- 38 (7 digits) double double 8 8 Нет none 1,7E +/- 308 (15 знаков) 1.7E +/- 308 (15 digits) long double long double то же, что и Double same as double Нет none То же, что и Double Same as double wchar_t wchar_t 2 2 __wchar_t __wchar_t От 0 до 65 535 0 to 65,535
Читайте также:  Intel core i5 6400 lga 1151 oem

В зависимости от того, как он используется, переменная __wchar_t обозначает либо тип расширенных символов, либо многобайтовый символ. Depending on how it’s used, a variable of __wchar_t designates either a wide-character type or multibyte-character type. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L . Use the L prefix before a character or string constant to designate the wide-character-type constant.

знаки со знаком и без знака — это модификаторы, которые можно использовать с любым целочисленным типом, кроме bool. signed and unsigned are modifiers that you can use with any integral type except bool. Обратите внимание , что char, знак charи неподписанный символ — это три различных типа для таких механизмов, как перегрузка и шаблоны. Note that char, signed char, and unsigned char are three distinct types for the purposes of mechanisms like overloading and templates.

Целочисленные и неподписанные типы int имеют размер четыре байта. The int and unsigned int types have a size of four bytes. Однако переносимый код не должен зависеть от размера int , так как языковой стандарт позволяет реализовать его в зависимости от реализации. However, portable code should not depend on the size of int because the language standard allows this to be implementation-specific.

C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. C/C++ in Visual Studio also supports sized integer types. Дополнительные сведения см. в разделах __int8, __int16, __int32, __int64 и Пределы целых чисел. For more information, see __int8, __int16, __int32, __int64 and Integer Limits.

Дополнительные сведения об ограничениях размеров каждого типа см. в разделе Встроенные типы. For more information about the restrictions of the sizes of each type, see Built-in types.

Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. The range of enumerated types varies depending on the language context and specified compiler flags. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++. For more information, see C Enumeration Declarations and Enumerations.

Опубликовано: Июнь 2016

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

Компиляторы Visual C++ (32-разрядные и 64-разрядные) поддерживают типы, указанные в приведенной ниже таблице.

long long ( unsigned«long«long )

Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным.

Диапазоны, представленные в следующей таблице, включают указанные значения.

Имя типа Байты Другие имена Диапазон значений
int 4 signed От -2 147 483 648 до 2 147 483 647
unsigned int 4 без знака От 0 до 4 294 967 295
__int8 1 char От -128 до 127
unsigned __int8 1 unsigned char От 0 до 255
__int16 2 короткое, короткое целочисленное, короткое целочисленное со знаком От -32 768 до 32 767
unsigned __int16 2 короткое без знака, короткое целочисленное без знака От 0 до 65 535
__int32 4 со знаком, целочисленное со знаком, целочисленное От -2 147 483 648 до 2 147 483 647
unsigned __int32 4 без знака, целочисленное без знака От 0 до 4 294 967 295
__int64 8 длинное длинное, со знаком длинное длинное От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
unsigned __int64 8 без знака длинное длинное От 0 до 18 446 744 073 709 551 615
bool 1 Нет false или true
char 1 Нет По умолчанию — от -128 до 127
Читайте также:  Что делать если не горит лампочка

При компиляции при помощи /J — от 0 до 255

signed char 1 Нет От -128 до 127 unsigned char 1 Нет От 0 до 255 short 2 короткое целочисленное, короткое целочисленное со знаком От -32 768 до 32 767 unsigned short 2 короткое целочисленное число без знака От 0 до 65 535 long 4 длинное целочисленное, длинное целочисленное со знаком От -2 147 483 648 до 2 147 483 647 unsigned long 4 длинное целочисленное число без знака От 0 до 4 294 967 295 длинное длинное 8 Нет (но эквивалентно __int64) От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 без знака длинное длинное 8 Нет (но эквивалентно unsigned__int64) От 0 до 18 446 744 073 709 551 615 enum Возможны разные варианты Нет См. раздел Заметки ниже в этой статье. плавающее 4 Нет 3,4E +/- 38 (7 знаков) double 8 Нет 1,7E +/- 308 (15 знаков) длинное двойное То же, что и для двойного Нет То же, что и для двойного wchar_t 2 __wchar_t От 0 до 65 535

В зависимости от характера использования переменная типа __wchar_t обозначает расширенный символьный или многобайтовый символьный тип. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .

signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, кроме типа bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа, предназначенных для механизмов, подобных перегрузке и шаблонам.

Размер типов int и unsigned«int — 4 байта. Однако переносимый код не должен зависеть от размера int , поскольку языковой стандарт позволяет варьировать его в зависимости от реализации.

C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделах __int8, __int16, __int32, __int64 и Пределы целых чисел.

Дополнительные сведения об ограничениях, связанных с размером, каждого типа см. в статье Фундаментальные типы.

Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++.

Для начала несколько вопросов:

  1. Тип char по умолчанию знаковый или нет? А int ?
  2. Законно ли неявное приведение (signed char *) к (char *) ? А то же для int ?
  3. Сколько бит в unsigned char ?
  4. Какое максимальное число гарантированно можно поместить в int ? А минимальное?
  5. Тип long определённо больше, чем char , не так ли?

Разумеется, экспериментально искать ответы на эти вопросы с помощью вашего любимого компилятора в вашей любимой системе на вашем любимом компьютере 1) — не лучшая идея. Мы говорим о стандарте языка (С99 и новее).

Если вы уверенно сможете правильно ответить на эти вопросы, тогда эта статья не для вас. В противном случае десять минут, потраченные на её чтение, будут весьма полезны.

  1. Знаковые оба.
  2. Законны оба.
  3. 8.
  4. 2147483647. -2147483648.
  5. Конечно, Кэп.

  1. char — не регламентируется, int — знаковый.
  2. Для int — законно, а для char — нет.
  3. Не менее 8.
  4. 32767. -32767
  5. Вообще говоря, нет.

Про signed и unsigned

Все целочисленные типы кроме char , по умолчанию знаковые (signed).

С char ситуация сложнее. Стандарт устанавливает три различных типа: char , signed char , unsigned char . В частности, указатель типа (signed char *) не может быть неявно приведён к типу (char *) .

Читайте также:  Fallout 4 где взять болт

Хотя формально это три разных типа, но фактически char эквивалентен либо signed char , либо unsigned char — на выбор компилятора (стандарт ничего конкретного не требует).

Подробнее про char я написал в комментариях.

О размере unsigned char

Тип unsigned char является абстракцией машинного байта. Важность этого типа проявляется в том, что С может адресовать память только с точностью до байта. На большинстве архитектур размер байта равен 8 бит, но бывают и исключения. Например, процессоры с 36-битной архитектурой как правило имеют 9-битный байт, а в некоторых DSP от Texas Instruments байты состоят из 16 или 32 бит. Древние архитектуры могут иметь короткие байты из 4, 5 или 7 бит.

Стандарт С вынужден отказаться от допотопных архитектур и требует, чтобы байты были как минимум 8-битные. Конкретное значение ( CHAR_BIT 2) ) для данной платформы записано в заголовочном файле limits.h .

Размеры целочисленных типов в С

C переносимый, поэтому в нём базовые целочисленные типы ( char , short , int и др.) не имеют строго установленного размера, а зависят от платформы. Однако эти типы не были бы переносимы, если бы
их размеры были совершенно произвольные: стандарт устанавливает минимальные диапазоны принимаемых значений для всех базовых целочисленные типов. А именно,

  • signed char: -127. 127 (не -128. 127; аналогично другие типы)
  • unsigned char : 0. 255 (= 2 8 −1)
  • signed short : -32767. 32767
  • unsigned short : 0. 65535 (= 2 16 −1)
  • signed int : -32767. 32767
  • unsigned int : 0. 65535 (= 2 16 −1)
  • signed long : -2147483647. 2147483647
  • unsigned long : 0. 4294967295 (= 2 32 −1)
  • signed long long : -9223372036854775807. 9223372036854775807
  • unsigned long long : 0. 18446744073709551615 (= 2 64 −1)

Стандарт требует, чтобы максимальное значение unsigned char было 2 CHAR_BIT −1 (см. предыдущий пункт).

Стандарт требует sizeof(char) . Таким образом, вполне законны ситуации типа sizeof(char)=sizeof(long)=32 . Для некоторых DSP от Texas Instruments так и есть.

Конкретные значения этих диапазонов для данной платформы указаны заголовочном файле limits.h .

Новые типы в С99

После того, как C99 добавил тип long long , целочисленных типов и путаницы стало ещё больше. Чтобы навести порядок, стандарт ввёл заголовочный файл stdint.h , где определяются типы вроде int16_t (равно 16 бит), int_least16_t (минимальный тип, способный вместить 16 бит), int_fast16_t (по крайней мере 16 бит, работа с этим типом наиболее быстрая на данной платформе) и т. п.

least- и fast-типы фактически являются заменой рассмотренных выше типов int , short , long и т. п. только вдобавок дают программисту возможность выбора между скоростью и размером.

От типов вроде int16_t , со строгим указанием размера, страдает переносимость: скажем, на архитектуре с 9-битным байтом может просто не найтись 16-битного регистра. Поэтому стандарт тут явно говорит, что эти типы опциональны. Но учитывая, что какой бы код вы ни писали, чуть менее чем во всех случаях целевая архитектура фиксирована даже в худшем случае с точностью до семейства (скажем, x86 или AVR), внутри которого, размер байта не может вдруг поменяться, то переносимость фактически сохраняется. Более того, типы вроде int16_t оказались даже более популярными, чем int_least16_t и int_fast16_t , а при низкоуровневом программировании (микроконтроллеры, драйверы устройств) и подавно, ибо там зачастую неопределённость размера переменной просто непозволительна.

1) Для удобства тройку архитектура+ОС+компилятор далее будем называть просто платформой.
2) Этот макрос правильнее было бы назвать UCHAR_BIT , но по причинам совместимости он называется так, как называется.