В 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# сгенерирует код, в котором старший разряд целого числа используется в качестве
Целочисленные типы со знаком имеют большое значение для очень многих алгоритмов, но по абсолютной величине они наполовину меньше своих аналогов без знака. Вот как, например, выглядит число 32 767 типаshortв двоичном представлении.
0111111111111111
Если установить старший разряд этого числа равным 1, чтобы получить значение со знаком, то оно будет интерпретировано как -1, принимая во внимание формат дополнения до двух. Но если объявить его как значение типаushort,то после установки в 1 старшего разряда оно станет равным 65 535.