Справочник по C#. Целочисленные типы
- Время чтения: 5 мин
В этой статье
Целочисленные типы — это подмножество простых типов. Они могут инициализироваться литералами.The integral numeric types are a subset of the simple types and can be initialized with literals. Кроме того, все целочисленные типы являются типами значений.All integral types are also value types. Все целочисленные типы поддерживают арифметические операторы, побитовые логические операторы, операторы сравнения и равенства.All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.
Характеристики целочисленных типовCharacteristics of the integral types
C# поддерживает следующие предварительно определенные целочисленные типы:C# supports the following predefined integral types:
Ключевое слово или тип C#C# type/keyword | ДиапазонRange | РазмерSize | Тип .NET.NET type |
---|---|---|---|
sbyte | От -128 до 127-128 to 127 | 8-разрядное целое число со знакомSigned 8-bit integer | System.SByte |
byte | От 0 до 2550 to 255 | 8-разрядное целое число без знакаUnsigned 8-bit integer | System.Byte |
short | От -32 768 до 32 767-32,768 to 32,767 | 16-разрядное целое число со знакомSigned 16-bit integer | System.Int16 |
ushort | От 0 до 65 5350 to 65,535 | 16-разрядное целое число без знакаUnsigned 16-bit integer | System.UInt16 |
int | От -2 147 483 648 до 2 147 483 647-2,147,483,648 to 2,147,483,647 | 32-разрядное целое число со знакомSigned 32-bit integer | System.Int32 |
uint | От 0 до 4 294 967 2950 to 4,294,967,295 | 32-разрядное целое число без знакаUnsigned 32-bit integer | System.UInt32 |
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 | 64-разрядное целое число со знакомSigned 64-bit integer | System.Int64 |
ulong | От 0 до 18 446 744 073 709 551 6150 to 18,446,744,073,709,551,615 | 64-разрядное целое число без знакаUnsigned 64-bit integer | System.UInt64 |
В приведенной выше таблице каждый тип ключевого слова C# из крайнего левого столбца является псевдонимом для соответствующего типа .NET.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Они взаимозаменяемые.They are interchangeable. Например, следующие объявления объявляют переменные одного типа:For example, the following declarations declare variables of the same type:
int a = 123;
System.Int32 b = 123;
По умолчанию все целочисленные типы имеют значение 0
.The default value of each integral type is zero, 0
. Все целочисленные типы имеют константы MinValue
и MaxValue
с минимальным и максимальными итоговыми значениями этого типа.Each of the integral types has the MinValue
and MaxValue
constants that provide the minimum and maximum value of that type.
Используйте структуру System.Numerics.BigInteger, чтобы представить целое число со знаком без верхней и нижней границ.Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.
Целочисленные литералыInteger literals
Целочисленные литералы могут быть:Integer literals can be
- десятичным числом: без префикса;decimal: without any prefix
- шестнадцатеричным числом: с префиксом
0x
или0X
;hexadecimal: with the0x
or0X
prefix - двоичными: с префиксом
0b
или0B
(доступно в C# 7.0 и более поздних версиях).binary: with the0b
or0B
prefix (available in C# 7.0 and later)
В приведенном ниже коде показан пример каждого из них.The following code demonstrates an example of each:
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
В предыдущем примере также показано использование _
в качестве цифрового разделителя, который поддерживается, начиная с версии C# 7.0.The preceding example also shows the use of
as a digit separator, which is supported starting with C# 7.0. Цифровой разделитель можно использовать со всеми видами числовых литералов.You can use the digit separator with all kinds of numeric literals.
Тип целочисленного литерала определяется его суффиксом следующим образом:The type of an integer literal is determined by its suffix as follows:
Если литерал не имеет суффикса, его типом будет первый из следующих типов, в котором может быть представлено его значение:
int
,uint
,long
,ulong
.If the literal has no suffix, its type is the first of the following types in which its value can be represented:int
,uint
,long
,ulong
.Если у литерала есть суффикс
U
илиu
, его типом будет первый из следующих типов, в котором может быть представлено его значение:uint
,ulong
.If the literal is suffixed byU
oru
, its type is the first of the following types in which its value can be represented:uint
,ulong
.Если у литерала есть суффикс
L
илиl
, его типом будет первый из следующих типов, в котором может быть представлено его значение:long
,ulong
.If the literal is suffixed byL
orl
, its type is the first of the following types in which its value can be represented:long
,ulong
.Примечание
Строчную букву
l
можно использовать в качестве суффикса.You can use the lowercase letterl
as a suffix. Однако при этом выдается предупреждение компилятора, так как буквуl
можно перепутать с цифрой1
.However, this generates a compiler warning because the letterl
can be confused with the digit1
. Для ясности используйтеL
.UseL
for clarity.Если у литерала есть суффикс
UL
,Ul
,uL
,ul
,LU
,Lu
,lU
илиlu
, его тип —ulong
.If the literal is suffixed byUL
,Ul
,uL
,ul
,LU
,Lu
,lU
, orlu
, its type isulong
.
Если значение, представленное целочисленным литералом, превышает UInt64.MaxValue, происходит ошибка компиляции CS1021.If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.
Если определенный тип целочисленного литерала — int
, а значение, представленное литералом, находится в диапазоне целевого типа, значение можно неявно преобразовать в sbyte
, byte
, short
, ushort
, uint
или ulong
:If the determined type of an integer literal is int
and the value represented by the literal is within the range of the destination type, the value can be implicitly converted to sbyte
, byte
, short
, ushort
, uint
, or ulong
:
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Как показано в предыдущем примере, если значение литерала выходит за пределы диапазона целевого типа, возникает ошибка компилятора CS0031.As the preceding example shows, if the literal’s value is not within the range of the destination type, a compiler error CS0031 occurs.
Можно также использовать приведение для преобразования значения, представленного целочисленным литералом, в тип, отличный от определенного типа литерала.You also can use a cast to convert the value represented by an integer literal to the type other than the determined type of the literal:
var signedByte = (sbyte)42;
var longVariable = (long)42;
ПреобразованияConversions
Любой целочисленный тип можно преобразовать в любой другой целочисленный тип.You can convert any integral numeric type to any other integral numeric type. Если целевой тип может хранить все значения исходного типа, преобразование является неявным.If the destination type can store all values of the source type, the conversion is implicit. В противном случае используйте оператор приведения ()
для вызова явного преобразования.Otherwise, you need to use the cast operator ()
to invoke an explicit conversion. Для получения дополнительной информации см. статью Встроенные числовые преобразования.For more information, see Built-in numeric conversions.
Спецификация языка C#C# language specification
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:For more information, see the following sections of the C# language specification:
См. такжеSee also
docs.microsoft.com
Размер типов данных в C++ | Уроки С++
Обновл. 1 Дек 2019 |
Как мы уже знаем из урока №28, память на современных компьютерах, как правило, организована в блоки, которые состоят из байт, причём каждый блок имеет свой уникальный адрес. До этого момента, память можно было сравнивать с почтовыми ящиками (те, которые находятся в каждом подъезде), куда мы можем поместить информацию и откуда мы её можем извлечь, а переменные — это всего лишь номера этих почтовых ящиков.
Тем не менее, эта аналогия не совсем подходит к программированию, так как переменные могут занимать больше 1 байта памяти. Следовательно, одна переменная может использовать 2, 4 или даже 8 последовательных адресов. Объём памяти, который использует переменная, зависит от её типа данных. Так как мы, как правило, получаем доступ к памяти через имена переменных, а не через адреса памяти, то компилятор может скрывать от нас все детали работы с переменными разных размеров.
Есть несколько причин по которым полезно знать, сколько памяти занимает определённая переменная/тип данных.
Во-первых, чем больше она занимает, тем больше информации сможет хранить. Так как каждый бит содержит либо 0
, либо 1
, то 1 бит может иметь 2 возможных значения.
2 бита могут иметь 4 возможных значения:
бит 0 | бит 1 |
0 | 0 |
0 | 1 |
1 | 0 |
1 | 1 |
3 бита могут иметь 8 возможных значений:
бит 0 | бит 1 | бит 2 |
0 | 0 | 0 |
0 | 0 | 1 |
0 | 1 | 0 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
1 | 1 | 1 |
По сути, переменная с n-ным количеством битов может иметь 2n возможных значений. Поскольку байт состоит из 8 бит, то он может иметь 28 (256) возможных значений.
Размер переменной накладывает ограничения на количество информации, которую она может хранить. Следовательно, переменные, которые используют больше байт, могут хранить более широкий диапазон значений.
Во-вторых, компьютеры имеют ограниченное количество свободной памяти. Каждый раз, когда мы объявляем переменную, небольшая часть этой свободной памяти выделяется до тех пор, пока переменная существует. Поскольку современные компьютеры имеют много памяти, то, в большинстве случаев, это не является проблемой, особенно когда в программе всего лишь несколько переменных. Тем не менее, для программ с большим количеством переменных (например, 100 000), разница между использованием 1-байтовых или 8-байтовых переменных может быть значительной.
Размер основных типов данных в C++
Возникает вопрос: «Сколько памяти занимают переменные разных типов данных?». Вы можете удивиться, но размер определённых типов данных зависит от компилятора и/или архитектуры компьютера!
C++ гарантирует только их минимальный размер:
Категория | Тип | Минимальный размер |
Логический тип данных | bool | 1 байт |
Символьный тип данных | char | 1 байт |
wchar_t | 1 байт | |
char16_t | 2 байта | |
char32_t | 4 байта | |
Целочисленный тип данных | short | 2 байта |
int | 2 байта | |
long | 4 байта | |
long long | 8 байт | |
Тип данных с плавающей запятой | float | 4 байта |
double | 8 байт | |
long double | 8 байт |
Фактический размер переменных может отличаться на разных компьютерах, поэтому для его определения используют оператор sizeof().
sizeof() — это унарный оператор, который вычисляет и возвращает размер определённой переменной или определённого типа данных в байтах. Вы можете скомпилировать и запустить следующую программу, чтобы выяснить, сколько занимают разные типы данных на вашем компьютере:
#include <iostream> int main() { std::cout << «bool:\t\t» << sizeof(bool) << » bytes» << std::endl; std::cout << «char:\t\t» << sizeof(char) << » bytes» << std::endl; std::cout << «wchar_t:\t» << sizeof(wchar_t) << » bytes» << std::endl; std::cout << «char16_t:\t» << sizeof(char16_t) << » bytes» << std::endl; std::cout << «char32_t:\t» << sizeof(char32_t) << » bytes» << std::endl; std::cout << «short:\t\t» << sizeof(short) << » bytes» << std::endl; std::cout << «int:\t\t» << sizeof(int) << » bytes» << std::endl; std::cout << «long:\t\t» << sizeof(long) << » bytes» << std::endl; std::cout << «long long:\t» << sizeof(long long) << » bytes» << std::endl; std::cout << «float:\t\t» << sizeof(float) << » bytes» << std::endl; std::cout << «double:\t\t» << sizeof(double) << » bytes» << std::endl; std::cout << «long double:\t» << sizeof(long double) << » bytes» << std::endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> int main() { std::cout << «bool:\t\t» << sizeof(bool) << » bytes» << std::endl; std::cout << «char:\t\t» << sizeof(char) << » bytes» << std::endl; std::cout << «wchar_t:\t» << sizeof(wchar_t) << » bytes» << std::endl; std::cout << «char16_t:\t» << sizeof(char16_t) << » bytes» << std::endl; std::cout << «char32_t:\t» << sizeof(char32_t) << » bytes» << std::endl; std::cout << «short:\t\t» << sizeof(short) << » bytes» << std::endl; std::cout << «int:\t\t» << sizeof(int) << » bytes» << std::endl; std::cout << «long:\t\t» << sizeof(long) << » bytes» << std::endl; std::cout << «long long:\t» << sizeof(long long) << » bytes» << std::endl; std::cout << «float:\t\t» << sizeof(float) << » bytes» << std::endl; std::cout << «double:\t\t» << sizeof(double) << » bytes» << std::endl; std::cout << «long double:\t» << sizeof(long double) << » bytes» << std::endl; return 0; } |
Вот результат с моего компьютера:
bool: 1 bytes
char: 1 bytes
wchar_t: 2 bytes
char16_t: 2 bytes
char32_t: 4 bytes
short: 2 bytes
int: 4 bytes
long: 4 bytes
long long: 8 bytes
float: 4 bytes
double: 8 bytes
long double: 8 bytes
Ваши результаты могут отличаться, если у вас другая архитектура, или другой компилятор. Обратите внимание, оператор sizeof() не используется с типом void, так как последний не имеет размера.
Если вам интересно, что значит \t
в коде выше, то это специальный символ, который используется вместо TAB. Мы его использовали для выравнивания столбцов. Детальнее об этом мы ещё поговорим в соответствующих уроках.
Интересно то, что sizeof() — это один из трёх операторов в C++, который является словом, а не символом (ещё есть new
и delete
).
Вы также можете использовать оператор sizeof() и с переменными:
#include <iostream> int main() { int x; std::cout << «x is » << sizeof(x) << » bytes» << std::endl; }
#include <iostream>
int main() { int x; std::cout << «x is » << sizeof(x) << » bytes» << std::endl; } |
Результат выполнения программы выше:
x is 4 bytes
В следующих уроках этой главы мы рассмотрим каждый из фундаментальных типов данных в С++ по отдельности.
Оценить статью:
Загрузка…За репост +20 к карме и моя благодарность!
ravesli.com
Типы данных в языке Си : целые, вещественные, символьные
Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.
Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных. Различают следующие виды типизации:
- Статическая типизация — контроль типов осуществляется при компиляции.
- Динамическая типизация — контроль типов осуществляется во время выполнения.
Язык Си поддерживает статическую типизацию, и типы всех используемых в программе данных должны быть указаны перед ее компиляцией.
Различают простые, составные и прочие типы данных.
Простые данные
Простые данные можно разделить на
- целочисленные,
- вещественные,
- символьные
- логические.
Составные (сложные) данные
- Массив — индексированный набор элементов одного типа.
- Строковый тип — массив, хранящий строку символов.
- Структура — набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.
Другие типы данных
- Указатель — хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.
Программа, написанная на языке Си, оперирует с данными различных типов. Все данные имеют имя и тип. Обращение к данным в программе осуществляется по их именам (идентификаторам).
Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a — z, A — Z, цифры 0 — 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.
Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.
Компилятор языка Си придерживается строгого соответствия прописных и строчных букв в именах идентификаторов и лексем.
Верно | Неверно |
int a = 2, b; b = a+3; | Int a=2; // правильно int INT a=2; |
int a = 2, b; b = A + 3; // идентификатор А не объявлен | |
int a = 2; b = a + 3; // идентификатор b не объявлен |
Целочисленные данные
Целочисленные данные могут быть представлены в знаковой и беззнаковой форме.
Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2n-1, где n-количество занимаемых битов.
Знаковые целые числа представляются в диапазоне -2n-1…+2n-1-1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).
Основные типы и размеры целочисленных данных:
Количество бит | Беззнаковый тип | Знаковый тип |
8 | unsigned char 0…255 | char -128…127 |
16 | unsigned short 0…65535 | short -32768…32767 |
32 | unsigned int | int |
64 | unsigned long int | long int |
Вещественные данные
Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме.
Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как
12345,678 = 1,2345678·104
Число 0,009876 в нормированной форме можно представить как
0,009876 = 9,876·10-3
В двоичной системе счисления значащий разряд, стоящий перед разделителем целой и дробной части, может быть равен только 1. В случае если число нельзя представить в нормированной форме (например, число 0), значащий разряд перед разделителем целой и дробной части равен 0.
Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа.
В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.
Различают три основных типа представления вещественных чисел в языке Си:
Тип | Обозна- чение в Си | Кол-во бит | Биты степени | Мантисса | Сдвиг |
простое | float | 32 | 30…23 | 22…0 | 127 |
двойной точности | double | 64 | 62…52 | 51…0 | 1023 |
двойной расширен- ной точности | long double | 80 | 78…64 | 62…0 | 16383 |
Как видно из таблицы, бит целое у типов float и double отсутствует. При этом диапазон представления вещественного числа состоит из двух диапазонов, расположенных симметрично относительно нуля. Например, диапазон представления чисел типа float можно представить в виде:
Пример: представить число -178,125 в 32-разрядной сетке (тип float).
Для представления числа в двоичной системе счисления преобразуем отдельно целую и дробную части:
17810 = 101100102.
0,12510 = 0,0012.
Тогда
178,12510 = 10110010,0012=1,0110010001·2111
Для преобразования в нормированную форму осуществляется сдвиг на 7 разрядов влево).
Для определения степени числа применяем сдвиг:
0111111+00000111 = 10000110.
Таким образом, число -178,125 представится в разрядной сетке как
Символьный тип
Символьный тип хранит код символа и используется для отображения символов в различных кодировках. Символьные данные задаются в кодах и по сути представляют собой целочисленные значения. Для хранения кодов символов в языке Си используется тип char.
Подробнее о кодировке символов
Логический тип
Логический тип применяется в логических операциях, используется при алгоритмических проверках условий и в циклах и имеет два значения:
- истина — true
- ложь — — false
В программе должно быть дано объявление всех используемых данных с указанием их имени и типа. Описание данных должно предшествовать их использованию в программе.
Пример объявления объектов
int n; // Переменная n целого типа
double a; // Переменная a вещественного типа двойной точности
Назад: Язык Си
prog-cpp.ru
Руководство C# | Типы данных
77C# — Руководство по C# — Типы данных
Типы данных имеют особенное значение в C#, поскольку это строго типизированный язык. Это означает, что все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Следовательно, строгий контроль типов позволяет исключить ошибки и повысить надежность программ. Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Такого понятия, как «бестиповая» переменная, в данном языке программирования вообще не существует. Более того, тип значения определяет те операции, которые разрешается выполнять над ним. Операция, разрешенная для одного типа данных, может оказаться недопустимой для другого.
В C# имеются две общие категории встроенных типов данных: типы значений и ссылочные типы. Они отличаются по содержимому переменной. Концептуально разница между ними состоит в том, что тип значения (value type) хранит данные непосредственно, в то время как ссылочный тип (reference type) хранит ссылку на значение.
Эти типы сохраняются в разных местах памяти: типы значений сохраняются в области, известной как стек, а ссылочные типы — в области, называемой управляемой кучей.
Давайте разберем типы значений.
Целочисленные типы
В C# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но тип char применяется, главным образом, для представления символов и поэтому рассматривается отдельно. Остальные восемь целочисленных типов предназначены для числовых расчетов. Ниже представлены их диапазон представления чисел и разрядность в битах:
Тип |
---|
professorweb.ru
Википедия — свободная энциклопедия
Википедия – самый крупный и популярный веб ресурс, собирающий в свою копилку огромное количество нужной и полезной информации. История Википедии начинается с 1995 года и продолжается по сей день.
Благодаря огромному количеству информации сайт стал самым посещаемым веб ресурсом по всему миру. Многие студенты и абитуриенты обращаются к Википедии при написании своих дипломных работ.
Википедия обладает рядом преимуществ, среди которых особо выдающимися являются следующие:
Википедия позволяет пользователям писать историю самостоятельно и редактировать ее согласно нынешнему положению;
Это самая крупная и большая библиотека с информацией в интернете;
Мультиязычность. Данный сайт доступен более чем на 10 мировых языках, в том числе на русском, немецком, английском и многих других;
Википедия – самый популярный и доступный интернет портал с огромным количеством достоверной и полезной информации.
Материал из Википедии — свободной энциклопедии
Перейти к поискуВикипедия — бесплатная энциклопедия в онлайн-режиме, которая доступна всем пользователям. Особенность интернет-ресурса в том, что все желающие могут создавать, а также редактировать статьи. Википедию можно назвать самым большим, универсальным справочником на просторах Интернета. Статус справочного сайта этот ресурс приобретал с 2001 года (со времени создания).
Проект wikipedia.green имеет одно важное преимущество. К каждой опубликованной статье есть качественное видео. Посетители нашего ресурса могут не только прочесть информацию, но и просмотреть видео-ролик. Для удобства пользователей создан поиск в правом верхнем углу. Чтобы редактировать или публиковать текстовый контент, нужно создать свою учетную запись.
Википедия — один из наиболее посещаемых сайтов. Информация из этого универсального справочника используется в научных исследованиях, на конференциях, в работе разных ведомств.
Искать среди 1 504 449 статейСейчас в Википедии 1 504 449 статей на русском языке.
Избранная статья
Первое сражение при реке Булл-Ран (англ. First Battle of Bull Run), также Первое сра
ru.wikipedia.green
C++ — Типы данных
Уважаемый пользователь! Реклама помогает поддерживать и развивать наш проект, делая его простым и удобным специально для Вас. Если проект интересный и важный для Вас, то отключите на нем блокировщик рекламы. Спасибо, что читаете сайт!
При написании программы на любом языке вам нужно использовать различные переменные для хранения различной информации. Переменные — это не что иное, как зарезервированные ячейки памяти для хранения значений. Это означает, что при создании переменной вы сохраняете некоторое пространство в памяти.
Вы можете хранить информацию различных типов данных, таких как символ, широкий символ, целое число, плавающая точка, двойная плавающая точка, логическое значение и т. Д. На основе типа данных переменной операционная система выделяет память и решает, что можно сохранить в зарезервированная память.
Примитивные встроенные типы
C ++ предлагает программисту богатый набор встроенных, а также пользовательских типов данных. В следующих таблицах перечислены семь основных типов данных C ++:
Type | Keyword |
---|---|
Boolean | bool |
Character | char |
Integer | int |
Floating point | float |
Double floating point | double |
Valueless | void |
Wide character | wchar_t |
Некоторые из основных типов могут быть изменены с использованием одного или нескольких модификаторов этого типа:
- signed
- unsigned
- short
- long
В следующей таблице показан тип переменной, объем памяти, который требуется для хранения значения в памяти, и то, что является максимальным и минимальным значением, которое может быть сохранено в таких переменных.
Type | Typical Bit Width | Typical Range |
---|---|---|
char | 1byte | -127 to 127 or 0 to 255 |
unsigned char | 1byte | 0 to 255 |
signed char | 1byte | -127 to 127 |
int | 4bytes | -2147483648 to 2147483647 |
unsigned int | 4bytes | 0 to 4294967295 |
signed int | 4bytes | -2147483648 to 2147483647 |
short int | 2bytes | -32768 to 32767 |
unsigned short int | Range | 0 to 65,535 |
signed short int | Range | -32768 to 32767 |
long int | 4bytes | -2,147,483,648 to 2,147,483,647 |
signed long int | 4bytes | same as long int |
unsigned long int | 4bytes | 0 to 4,294,967,295 |
float | 4bytes | +/- 3.4e +/- 38 (~7 digits) |
double | 8bytes | +/- 1.7e +/- 308 (~15 digits) |
long double | 8bytes | +/- 1.7e +/- 308 (~15 digits) |
wchar_t | 2 or 4 bytes | 1 wide character |
Размер переменных может отличаться от размера, указанного в приведенной выше таблице, в зависимости от компилятора и компьютера, который вы используете. Ниже приведен пример, который даст правильный размер различных типов данных на вашем компьютере.
#include <iostream>
using namespace std;
int main() {
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;
cout << "Size of double : " << sizeof(double) << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}
В этом примере используется endl , который вводит символ новой строки после каждой строки, а оператор << используется для передачи нескольких значений на экран. Мы также используем оператор sizeof () для получения размера различных типов данных.
Когда приведенный выше код компилируется и выполняется, он производит следующий результат, который может варьироваться от машины к машине:
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
Декларации typedef
Вы можете создать новое имя для существующего типа с помощью typedef
. Ниже приведен простой синтаксис для определения нового типа с использованием typedef:
typedef type newname;
Например, следующее говорит компилятору, что ногами является другое имя для int:
typedef int feet;
Теперь следующая декларация совершенно легальна и создает целочисленную переменную, называемую расстоянием:
feet distance;
Перечисленные типы
Перечислимый тип объявляет необязательное имя типа и набор из нуля или более идентификаторов, которые могут использоваться как значения типа. Каждый перечислитель является константой, тип которой является перечислением. Для создания перечисления требуется использование ключевого слова enum . Общий вид типа перечисления:
enum enum-name { list of names } var-list;
Здесь enum-name — это имя типа перечисления. Список имен разделяется запятой. Например, следующий код определяет перечисление цветов, называемых цветами, и переменной c цвета типа. Наконец, c присваивается значение «blue».
enum color { red, green, blue } c;
c = blue;
По умолчанию значение первого имени равно 0, второе имя имеет значение 1, а третье — значение 2 и т. Д. Но вы можете указать имя, определенное значение, добавив инициализатор. Например, в следующем перечислении зеленый будет иметь значение 5.
enum color { red, green = 5, blue };
Здесь blue будет иметь значение 6, потому что каждое имя будет больше, чем предыдущее.
Уважаемый пользователь! Реклама помогает поддерживать и развивать наш проект, делая его простым и удобным специально для Вас. Если проект интересный и важный для Вас, то отключите на нем блокировщик рекламы. Спасибо, что читаете сайт!
unetway.com
Фундаментальные типы — cppreference.com
(См. также список утилит, предоставляемых C++ для работы с типами.)
[править] Логический тип
- bool — тип, способный хранить одно из двух значений: true (истина) или false (ложь).
[править] Символьные типы
- signed char — тип для знакового представления символов.
- unsigned char — тип для беззнакового представления символов.
- char — тип для представления символов, который может наиболее эффективно обрабатываться в целевой системе (эквивалентный signed char или unsigned char, но всё же отличный от них тип).
- wchar_t — тип для широкого представления символов.
- char16_t — тип для представления символов в UTF-16. (начиная с C++11)
- char32_t — тип для представления символов в UTF-32. (начиная с C++11)
[править] Целочисленные типы
- int — базовый целочисленный тип. Может быть опущен, если представлен любой из модификаторов. Если не представлен ни один из модификаторов размера, гарантировано имеет ширину не меньше 16 бит. Тем не менее, на 32/64-битных системах почти всегда имеет ширину не меньше 32 бит (см. ниже).
[править] Модификаторы
Модифицируют целочисленный тип. Могут располагаться в любом порядке. Только один модификатор из каждой группы может быть представлен в имени типа.
Знаковость
- signed — целевой тип будет иметь знаковое представление (по умолчанию, если не представлен ни один из вариантов).
- unsigned — целевой тип будет иметь беззнаковое представление.
Размер
- short — целевой тип будет оптимизирован по размеру и иметь ширину не меньше 16 бит.
- long — целевой тип будет иметь ширину не меньше 32 бит.
- long long — целевой тип будет иметь ширину не меньше 64 бит. (начиная с C++11)
[править] Свойства
Данная таблица обобщает все доступные целочисленные типы и их свойства:
Спецификатор типа | Эквивалентный тип | Ширина в битах согласно модели данных | ||||
---|---|---|---|---|---|---|
Стандарт C++ | LP32 | ILP32 | LLP64 | LP64 | ||
short | short int | не меньше чем 16 | 16 | 16 | 16 | 16 |
short int | ||||||
signed short | ||||||
signed short int | ||||||
unsigned short | unsigned short int | |||||
unsigned short int | ||||||
int | int | не меньше чем 16 | 16 | 32 | 32 | 32 |
signed | ||||||
signed int | ||||||
unsigned | unsigned int | |||||
unsigned int | ||||||
long | long int | не меньше чем 32 | 32 | 32 | 32 | 64 |
long int | ||||||
signed long | ||||||
signed long int | ||||||
unsigned long | unsigned long int | |||||
unsigned long int | ||||||
long long | long long int (C++11) | не меньше чем 64 | 64 | 64 | 64 | 64 |
long long int | ||||||
signed long long | ||||||
signed long long int | ||||||
unsigned long long | unsigned long long int (C++11) | |||||
unsigned long long int |
Кроме минимального размера в битах стандарт C++ гарантирует, что
- 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long).
Примечание: возможен крайний случай, в котором байты имеют размер 64 бита, все типы (включая char) имеет ширину 64 бита, и sizeof возвращает 1 для всех типов.
Примечание: целочисленная арифметика определяется по-разному для знаковых и беззнаковых целочисленных типов. См. арифметические операторы, в частности целочисленное переполнение.
[править] Модели данных
Выборы размеров фундаментальных типов в каждой реализации в совокупности называются моделью данных. Широкое применение нашли 4 модели данных:
32-битные системы:
- LP32 или 2/4/4 (int — 16 бит, long и указатель — 32 бита)
- ILP32 или 4/4/4 (int, long и указатель — 32 бита)
- Win32 API
- Unix и Unix-подобные системы (Linux, Mac OS X)
64-битные системы:
- LLP64 или 4/4/8 (int и long — 32 бита, указатель — 64 бита)
- LP64 или 4/8/8 (int — 32 бита, long и указатель — 64 бита)
- Unix и Unix-подобные системы (Linux, Mac OS X)
Другие модели очень редки. Например, ILP64 (8/8/8: int, long и указатель — 64 бита) появилась только в некоторых ранних 64-битных Unix-системах (н-р, Unicos на компьютерах Cray).
[править] Типы с плавающей точкой
- float — тип с плавающей точкой одинарной точности. Обычно 32-битный тип с плавающей точкой формата IEEE-754
- double — тип с плавающей точкой двойной точности. Обычно 64-битный тип с плавающей точкой формата IEEE-754
- long double — тип с плавающей точкой повышенной точности. Не обязательно отображается на типы IEEE-754. Обычно 80-битный тип с плавающей точкой формата x87 на архитектурах x86 и x86-64.
[править] Промежутки значений
Данная таблица содержит предельные значения наиболее распространнёных числовых форматов. Так как Стандарт C++ разрешает любое представление знаковых целых чисел, в таблице присутствуют как минимальные гарантируемые ограничения (соответствующие пределам обратного кода или прямого кода), так и пределы наиболее используемой реализации — дополнительного кода. Тем не менее, все популярные модели данных (включая все из ILP32, LP32, LP64, LLP64) используют представление в дополнительном коде.
Тип | Размер в битах | Формат | Промежуток значений | |
---|---|---|---|---|
Приблизительный | Точный | |||
символьный | 8 | знаковый (обратный код) | от -127 до 127 | |
знаковый (дополнительный код) | от -128 до 127 | |||
беззнаковый | от 0 до 255 | |||
целочисленный | 16 | знаковый (обратный код) | ± 3,27 · 104 | от -32767 до 32767 |
знаковый (дополнительный код) | от -32768 до 32767 | |||
беззнаковый | от 0 до 6,55 · 104 | от 0 до 65535 | ||
32 | знаковый (обратный код) | ± 2,14 · 109 | от -2147483647 до 2147483647 | |
знаковый (дополнительный код) | от -2147483648 до 2147483647 | |||
беззнаковый | от 0 до 4,29 · 109 | от 0 до 4294967295 | ||
64 | знаковый (обратный код) | ± 9,22 · 1018 | от -9223372036854775807 до 9223372036854775807 | |
знаковый (дополнительный код) | от -9223372036854775808 до 9223372036854775807 | |||
беззнаковый | от 0 до 1,84 · 1019 | от 0 до 18446744073709551615 | ||
с плавающей точкой | 32 | IEEE-754 | ± 3,4 · 10± 38 (~7 цифр) |
|
64 | IEEE-754 | ± 1,7 · 10± 308 (~15 цифр) |
|
[править] Ключевые слова
bool, true, false, char, wchar_t, char16_t, char32_t, int, short, long, signed, unsigned, float, double
[править] См. также
ru.cppreference.com