Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 13
Текст из файла (страница 13)
Поэтому, вообще говоря, С№ представляет собой определенное сочетание самого языка С№ и стандартных классов .)ь)ЕТ. Как будет показано далее, библиотека 62 Часть й Язык С№ классов обеспечивает функциональные воэможности, являющиеся неотъемлемой частью любой программы на С№. Для того чтобы научиться программировать на С№, нужно знать не только сам язык, но и уметь пользоваться стандартными классами. Различные элементы библиотеки классов для среды .НЕТ Ггатеч огк рассматриваются в части 1 этой книги, а в части 11 — сама библиотека по отдельным ее составляющим. ГЛАВА Типы данных, литералы и переменные В этой главе рассматриваются три основополагающих элемента С№: типы данных, литералы и переменные. В целом типы данных, доступные в языке программирования, определяют те виды задач, для решения которых можно применять данный язык.
Как и следовало ожидать, в С№ предоставляется богатый набор встроенных типов данных, что делает этот язык пригодным для самого широкого применения. Любой из этих типов данных может служить для создания переменных и констант, которые в языке С№ называются литералами. О значении типов данных Типы данных имеют особенное значение в С№, поскольку это строго типизированный язык. Это означает, что все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Следовательно, строгий контроль типов позволяет исключить ошибки и повысить надежность программ.
Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Более того, тип значения определяет те операции, которые разрешается выполнять над ним. Операция, разрешенная для одного типа данных, может оказаться недопустимой для другого. Типы значений в СФ В С№ имеются две общие категории встроенных типов данных: шипы значений и ссылочные типы. Они отличаются по содержимому переменной. Если переменная относится к типу значения, то она содержит само значение, например 3,1416 или 212.
А если переменная относится к ссылочному типу, то она содержит ссылку на значение. Наиболее распространенным примером использования ссылочного типа является класс, но о классах и ссылочных типах речь пойдет далее в этой книге. А здесь рассматриваются типы значений. 64 Часть 1. Язык СЗ Основу языка С№ составляют 13 типов значений, перечисленных в табл. 3.1. Все они называются простыми типами, поскольку состоят из единственного значения. (Иными словами, они не состоят из двух или более значений.) Они составляют основу системы типов С№, предоставляя простейшие, низкоуровневые элементы данных, которыми можно оперировать в программе. Простые типы данных иногда еще называют примитивными. Таблица.
3.1. Типы значений а С№ Тип Значение Ьоо1 Ьуге 8-разрядный целочисленный без знака Символьный Десятичный (для финансовых расчетов) С плавающей точкой двойной точности С плавающей точкой одинарной точности 1пг Целочисленный Длинный целочисленный 1опд вЬуге еногг цзпг п1опс пвпогс В С№ строго определены пределы и характер действия каждого типа значения.
Исходя из требований к переносимости программ, С№ не допускает в этом отношении никаких компромиссов. Например, тип йпс должен быть одинаковым во всех средах выполнения. Но в этом случае отпадает необходимость переписывать код для конкретной платформы. И хотя строгое определение размерности типов значений может стать причиной незначительного падения производительности в некоторых средах, эта мера необходима для достижения переносимости программ.
На заметку! Помимо простых тинов, в С№ определены еще три категории тинов значений: перечисгения, структуры и обнуллемые тины. Все они расснатриваются далее в этой книге. Целочисленные типы В С№ определены девять целочисленных типов: спас, Ьуге, зЬуге, зпогг, цзпогг, 1пг, цйпг, 1опд и ц1опд. Но тип спас применяется, главным образом, для представления символов и поэтому рассматривается далее в этой главе. Остальные восемь целочисленных типов предназначены для числовых расчетов. Ниже представлены их диапазон представления чисел и разрядность в битах.
Тип Разрядность в битах Диапазон представления чисел ьуге 8 еьуге 8 0-255 -128-127 сваг оесгна1 аопвге 11оаг Логический, предоставляетдва значения;"истина" или "ложь" 8-разрядный целочисленный со знаком Короткий целочисленный Целочисленный без знака Длинный целочисленный без знака Короткий целочисленный без знака Глава 3. Типы данных, литералы и переменные 65 Тип Разрядность в битах Диапазон представления чисел -32 768 — 32 767 0-65 535 -2 147 483 648 — 2 147 483 647 0-4 294 967 295 -9 223 372 036 854 775 808-9 223 372 036 854 775 807 0-18 446 744 073 709 55! 615 влогс 16 цвьохС 16 1пс 32 п( пС 32 1опч ц1опч 64 Как следует из приведенной выше таблицы, в С№ определены оба варианта различных целочисленных типов: со знаком и без знака.
Целочисленные типы со знаком отличаются от аналогичных типов без знака способом интерпретации старшего разряда целого числа. Так, если в программе указано целочисленное значение со знаком, то компилятор С№ сгенерирует код, в котором старший разряд целого числа используется в качестве флага знака. Число считается положительным, если флаг знака равен О, и отрицательным, если он равен 1. Отрицательные числа практически всегда представляются методом дополнения до двух, в соответствии с которым все йвоичные разряды отрицательного числа сначала инвертируются, а затем к этому числу добавляется 1. Целочисленные типы со знаком имеют большое значение для очень многих алгоритмов, но по абсолютной величине они наполовину меньше своих аналогов без знака.
Вот как, например, выглядит число 32 767 типа в(тогс в двоичном представлении: 0111111111111111 // Вычислить расстояние от Земли до Солнца в дюймах. цвгпЧ зувтелп о1авв 1пснев ( всаС1о чо( 6 Махп(( ( 1опЧ гпоьевт 1опч юх1еси ю11ев = 930000001 // 93 000 000 миль до Солнца // 5 250 футов в миле, 12 дюймов в футе. Если установить старший разряд этого числа равным 1, чтобы получить значение со знаком, то оно будет интерпретировано как — 1, принимая во внимание формат дополнения до двух. Но если объявить его как значение типа цв(тогс, то после установки в 1 старшего разряда оно станет равным 65 535. Вероятно, самым распространенным в программировании целочисленным типом является тип фпс.
Переменные типа 1пс нередко используются для управления циклами, индексирования массивов и математических расчетов общего назначения. Когда же требуется целочисленное значение с большим диапазоном представления чисел, чем у типа хпс, то для этой цели имеется целый ряд других целочисленных типов. Так, если значение нужно сохранить без знака, то для него можно выбрать тип цспс, для больших значений со знаком — тип 1опч, а для больших значений без знака — тип ц1опч.
В качестве примера ниже приведена программа, вычисляющая расстояние от Земли до Солнца в дюймах. Для хранения столь большого значения в ней используется переменная типа 1оп9. 66 Часть (. язнк Сз ьпсьея = ю11еэ * 5280 * 12; Сопзо1е.игьгеШде (" Расстояние до Солнца: твсьеэ + " дюймов."); Вот как выглядит результат выполнения этой программы: Расстояние до Солнца: 5892480000000 дюймов. Очевидно, что этот результат нельзя было бы сохранить в переменной типа Рпь или ейпс. Самыми мелкими целочисленными типами являются Ьусе и эЬуге. Тип Ьусе представляет целые значения без знака в пределах от 0 до 255.
Переменные типа Ьусе особенно удобны для обработки исходных двоичных данных, например байтового потока, поступаюшего от некоторого устройства. А для представления мелких целых значений со знаком служит тип эьусе. Ниже приведен пример программы, в которой переменная типа Ьуге используется для управления циклом, где суммируются числа от 1 до 100. // Испольэовать тип Ьусе. цяаоч зуяьею) с1нвя Пве Ьуге ( ятатьс чоьг) Маад() ( Ьуге х) ьпг яцю2 яцю = О) Гог(х = 1; х <= 100) х++) яцю = ячи + х; Сонво1е.кгатеЬьпе( "Сумма чисел от 1 до 100 равна " + яцю)2 Результат выполнения этой программы выглядит следующим образом: Сумма чисел от 1 до 100 равна 5050 В приведенном выше примере программы цикл выполняется только от 1 до 100, что не превышает диапазон представления чисел для типа Ьуге, и поэтому для управления этим циклом ие требуется переменная более крупного типа.
Если требуется целое значение, большее, чем значение типа Ьусе или эЬухе, ио меньшее, чем значение типа 1пс или 01пь, то для него можно выбрать тип эьогс или цзьогс. Типы для представления чисел с плавающей точкой Типы с плаваюшей точкой позволяют представлять числа с дробной частью. В С(г имеются две разновидности типов данных с плавающей точкой: 51оаг и г(оцЬ1е. Оии представляют числовые значения с одинарной и двойной точностью соответственно. Так, Глава 3. Типы данных, литералы и переменные 67 разрядность типа 11оаг составляет 32 бита, что приближенно соответствует диапазону представления чисел от 5Š— 45 до 3,4Е+38. А разрядность типа г(оцЫе составляет 64 бита, что приближенно соответствует диапазону представления чисел от 5Е-324 до 1,7Е+308. В программировании на С№ чаще применяется тип с(оцЬ1е, в частности, потому, что во многих математических функциях из библиотеки классов С№, которая одновременно является библиотекой классов для среды .ХЕТ Ргашетлог(г, используются числовые значения типа с(оцЫе.