Тип данных характеризует основные свойства данных: возможные действия с данными, их внутреннее представление, диапазон допустимых значений, размер.
Все типы данных условно можно подразделить на простые (обычно это встроенные типы) и структурированные (структуры, классы).
В языке C# все простые типы и структуры относятся к значащим типам (в переменных таких типов непосредственно хранятся значения данных соответствующих типов), а классы — к ссылочным типам. Память для переменных значащих типов выделяется в стеке, для ссылочных объектов — в «общей куче» (heap). Работа со стековой памятью ведётся значительно быстрее, чем с памятью в heap. Память под объекты в «куче» выделяется с помощью операции new, а вот освобождать такую память в программе не требуется, так как этим занимается специальная программа — «сборщик мусора». Причём, освобождает ненужную память эта программа не сразу, а через некоторое время, руководствуясь своим особым алгоритмом, повлиять на который программист не может.
Рассмотрим подробнее простые типы, к которым относятся целые типы, вещественные, символьные, логические, но предварительно обратим внимание на одну особенность языка C#.
Встроенные типы языка C# имеют фиксированный размер, определённый стандартом языка. В отличие от языков C/C++, в которых, например, тип int зависит от разрядности операционной системы и компилятора, в языке C# размер типов не зависит от платформы.
Целые типы данных предназначены для хранения целых чисел. Все целые типы можно подразделить на знаковые и беззнаковые.
В таблице ниже приведены все знаковые целые типы и их основные характеристики:
Тип |
Размер, байт |
Диапазон допустимых значений |
sbyte |
1 |
-128 … 127 |
short |
2 |
-32768 … 32767 |
int |
4 |
-2147483648 … 2147483647 |
long |
8 |
-9223372036854775808 … 9223372036854775807 |
Примеры объявления переменных целых знаковых типов:
sbyte y; short t; int x; long r;
А в этой таблице приведены все беззнаковые типы данных:
Тип |
Размер, байт |
Диапазон допустимых значений |
byte |
1 |
0 … 255 |
ushort |
2 |
0 … 65535 |
uint |
4 |
0 … 4294967295 |
ulong |
8 |
0 … 18446744073709551615 |
Примеры объявления переменных целых беззнаковых типов:
byte a; ushort b; uint k; ulong j;
Для целых типов допустимы следующие группы операций:
арифметические операции;
побитовые операции;
операции сравнения;
автоувеличение и автоуменьшение.
Возможно автоматическое преобразование от менее мощного к более мощному типу, но не наоборот.
Например:
int i = 3;
short k = 2;
i = k; // это допустимо
k = i; // так нельзя, будет сообщение об ошибке
k = (short) i; //а так можно - выполняем явное преобразование
Для работы с действительными числами в языке C# имеется два вещественных типа: float (одинарная точность) и double (удвоенная точность). Приведем краткую характеристику этих типов:
Тип |
Размер, байт |
Диапазон возможных значений (по модулю) |
Точность (количество десятичных цифр) |
float |
4 |
10-45 … 1038 |
7 |
double |
8 |
10-324 … 10308 |
15 |
Примеры объявления переменных вещественных типов:
float x; double y;
Для вещественных типов допустимы следующие группы операций:
арифметические операции;
операции сравнения;
автоувеличение и автоуменьшение.
Этот тип специально создан для выполнения денежных расчётов. Обеспечивает точность до 29 десятичных цифр (деньги любят счёт!). Диапазон возможных значений (по модулю) от 10-28 до 1028. Под переменные этого типа отводится 16 байт. Пример объявления переменной этого типа:
decimal m;
Для хранения отдельных символов используется тип char. Так как в языке C# для кодирования символов используется Unicode, то под каждый символ отводится 2 байта. Пример объявления переменной этого типа:
char c;
Для работы с логическими величинами используется тип bool. Допустимы два значения: true (истина) и false (ложь). Пример объявления переменной логического типа:
bool p;
Для данных логического типа допустимы операции проверки на равенство и неравенство.
Следует иметь ввиду, что для булевого типа в C# запрещены какие-либо преобразования в целые типы.
|
|
|