ПРИМЕЧАНИЕ
В версии C# 4.0 внедрен новый тип данных, называемый dynamicи приводящий к отсрочке контроля типов до времени выполнения, вместо того чтобы производить подобный контроль во время компиляции. Поэтому тип dynamicявляется исключением из обычного правила контроля типов во время компиляции. Подробнее о типе dynamicречь пойдет в главе 17.
Типы значений в C#
В C# имеются две общие категории встроенных типов данных: типы значений и ссылочные типы. Они отличаются по содержимому переменной. Если переменная относится к типу значения, то она содержит само значение, например 3,1416 или 212. А если переменная относится к ссылочному типу, то она содержит ссылку на значение. Наиболее распространенным примером использования ссылочного типа является класс, но о классах и ссылочных типах речь пойдет далее в этой книге. А здесь рассматриваются типы значений.
В основу языка C# положены 13 типов значений, перечисленных в табл. 3.1. Все они называются простыми типами , поскольку состоят из единственного значения. (Иными словами, они не состоят из двух или более значений.) Они составляют основу системы типов С#, предоставляя простейшие, низкоуровневые элементы данных, которыми можно оперировать в программе. Простые типы данных иногда еще называют примитивными.
Таблица. 3.1. Типы значений в C#
Тип
Значение
bool
Логический, предоставляет два значения: “истина” или “ложь”
byte
8-разрядный целочисленный без знака
char
Символьный
decimal
Десятичный (для финансовых расчетов)
double
С плавающей точкой двойной точности
float
С плавающей точкой одинарной точности
int
Целочисленный
long
Длинный целочисленный
sbyte
8-разрядный целочисленный со знаком
short
Короткий целочисленный
uint
Целочисленный без знака
ulong
Длинный целочисленный без знака
ushort
Короткий целочисленный без знака
В C# строго определены пределы и характер действия каждого типа значения. Исходя из требований к переносимости программ, C# не допускает в этом отношении никаких компромиссов. Например, тип int должен быть одинаковым во всех средах выполнения. Но в этом случае отпадает необходимость переписывать код для конкретной платформы. И хотя строгое определение размерности типов значений может стать причиной незначительного падения производительности в некоторых средах, эта мера необходима для достижения переносимости программ.
ПРИМЕЧАНИЕ
Помимо простыхтипов, в C# определены еще три категории типов значений: перечисления, структуры и обнуляемые типы. Все они рассматриваются далее в этой книге.
Целочисленные типы
В C# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но тип char применяется, главным образом, для представления символов и поэтому рассматривается далее в этой главе. Остальные восемь целочисленных типов предназначены для числовых расчетов. Ниже представлены их диапазон представления чисел и разрядность в битах.
Тип
Разрядность в битах
Диапазон представления чисел
byte
8
0-255
sbyte
8
-128-127
short
16
-32 768-32 767
ushort
16
0-65 535
int
32
-2 147 483 648-2 147 483 647
uint
32
0-4 294 967 295
long
64
-9 223 372 036 854 775 808-9 223 372 036 854 775 807
ulong
64
0-18 446 744 073 709 551 615
Как следует из приведенной выше таблицы, в C# определены оба варианта различных целочисленных типов: со знаком и без знака. Целочисленные типы со знаком отличаются от аналогичных типов без знака способом интерпретации старшего разряда целого числа. Так, если в программе указано целочисленное значение со знаком, то компилятор C# сгенерирует код, в котором старший разряд целого числа используется в качестве флага знака. Число считается положительным, если флаг знака равен О, и отрицательным, если он равен 1. Отрицательные числа практически всегда представляются методом дополнения до двух, в соответствии с которым все двоичные разряды отрицательного числа сначала инвертируются, а затем к этому числу добавляется 1.
Читать дальше