За значението на типовете данни
Типовете данни са от особено значение в C#, тъй като това е строго типизиран език. Това означава, че всички операции са стриктно проверени от компилатора и невалидните операции не се компилират. Следователно силното въвеждане може да елиминира грешки и да увеличи надеждността на програмите. За да се осигури проверка на типа, всички променливи, изрази и стойности трябва да бъдат от определен тип. В този език за програмиране няма такова нещо като променлива без тип. Освен това типът на стойността определя операциите, които могат да се извършват върху нея. Операция, която е законна за един тип данни, може да не е валидна за друг.

68 Част I. Език C#
C# 4.0 въведе нов тип данни, наречен динамичен, който отлага проверката на типа до време на изпълнение, вместо да го прави по време на компилиране. Следователно динамичният тип е изключение от обичайното
Типове стойности в C#
Езикът C# се основава на 13 вида стойности, изброени в таблица 1. 3.1. Всички те се наричат прости типове, защото се състоят от една стойност. (С други думи, те не се състоят от две или повече стойности.) Те формират основата на системата от тип C#, предоставяйки най-простите членове на данните от ниско ниво, които могат да бъдат манипулирани в програма. Простите типове данни понякога се наричат също примитивни.
Таблица. 3.1. Типове стойности в C#
Boolean, осигурява две стойности: "true" или "false"
цяло число без знак
Десетичен (за финансови изчисления)
плаваща запетая с двойна точност
с плаваща запетая с единична точност
цяло число със знак
Цяло число без знак
Дълго цяло число без знак
Кратко цяло число без знак
C# стриктно дефинира границите и поведението на всеки тип стойност. Въз основа на изискванията за преносимост на програмата, C# не допуска никакви компромиси в това отношение. Например, типът int трябва да бъде един и същ във всички изпълнения. Но в този случай няма нужда да пренаписвате кода за con

Глава 3 Типове данни, литерали и променливи 69
бетонна платформа. Въпреки че стриктното дефиниране на типове стойности може да доведе до лек удар в производителността в някои среди, тази мярка е необходима за постигане на преносимост на програмата.
Целочислени типове
C# дефинира девет цели числа: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но типът char се използва предимно за представяне на символи и затова се обсъжда по-късно в тази глава. Останалите осем цели числа са за числени изчисления. По-долу е техният обхват на представяне на числа и битова дълбочина.
Битова дълбочина
Диапазон на представяне на числа
147 483147 483 647
223 372 036 854 775223 372 036 854 775 807
446 744 073 709 551 615
Както показва таблицата по-горе, C# дефинира и двата варианта на различните цели числа: със знак и без знак. Типовете цели числа със знак се различават от своите неподписани двойници по начина, по който интерпретират най-значимия бит на цялото число. Например, ако дадена програма зададе стойност на цяло число със знак, C# компилаторът ще генерира код, който използва най-значимия бит от цялото число като флаг за знак. Числото се счита за положително, ако флагът на знака е 0 иотрицателно, ако е 1. Отрицателните числа почти винаги се представят чрез допълнение от две, в което всички двоични цифри на отрицателно число първо се обръщат и след това 1 се добавя към това число.
Типовете цели числа със знак са важни за много алгоритми, но те са половината от абсолютната стойност на своите неподписани двойници. Например, ето как изглежда числото 32 767 от краткия тип в двоично представяне.
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Ако зададете най-значимия бит от това число на 1, за да получите стойност със знак, това ще се тълкува като вземане под внимание на формата на допълнение на двете. Но ако го декларирате като стойност от тип ushort, след като зададете най-значимия бит на 1, той става 65 535.
70 Част I. Език C#
Вероятно най-разпространеният целочислен тип в програмирането е типът int. Променливите от тип int често се използват за управление на цикъл, индексиране на масиви и математика с общо предназначение. Когато имате нужда от целочислена стойност с по-голям обхват на представяне на число от типа int, тогава има редица други цели числа за тази цел. Например, ако дадена стойност трябва да бъде съхранена без знак, тя може да бъде съхранена като uint, за големи стойности със знак, като long, и за големи стойности без знак, като ulong. Като пример, по-долу е дадена програма, която изчислява разстоянието от Земята до Слънцето в инчове. За да съхрани такава голяма стойност, той използва променлива от тип long.
// Изчислете разстоянието от Земята до Слънцето в инчове.
мили = 93000000; // 93 000 000 мили от слънцето
// 5280 фута на миля, 12 инча на фут, инчове = мили * 5280 * 12;
Console.WriteLine("Разстояние до Слънце: " + инча + " инча.");
Ето как изглежда резултатът от тази програма.
Разстояние до Слънцето: 5892480000000 инча.
Очевидно този резултат не може да бъде съхранен в променлива от тип int
Най-малките цели числа са byte и sbyte. Типът байт представлява цели числа без знак между 0 и 255. Байтовите променливи са особено полезни за обработка на необработени двоични данни, като например поток от байтове, идващ от някое устройство. И типът sbyte се използва за представяне на малки цели числа със знак. Следното е примерна програма, която използва променлива от тип byte за управление на цикъл, в който се сумират числа от 1 до 100.