1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 10
Текст из файла (страница 10)
При использовании аналогии с почтовым ящиком это звучит как: "Откроем ящик, Iвыбросим все, что там было, и положим в него 1".Знак равенства (=) называется оператором присваивания.Математик говорит: "и равно 1". Программист на С# выражается более точно:"Сохраним значение 1 в переменной п " . Операторы С# указывают компьютеру,что именно вы хотите сделать. Другими словами, операторы — это глаголы,а не существительные. Оператор присваивания берет значение справа от него исохраняет его в переменной, указанной слева от него.Ч т о т а к о е intМатематики работают с концепциями. Они могут в любой момент ввести любые переменные, которые только захотят, причем одна и та же переменная может иметь разное значение водном и том же уравнении. В лучшем случае математики рассматривают переменную как некое аморфное значение, а в худшем — как некоторую расплывчатую концепцию.Математик может написать следующее:ППпп= 1;= 1.1;= House;= "Ну и г л у п о с т ь ! "Приведенные строки приравнивают переменную п к разносортным вещам, и математик об этом абсолютно не беспокоится.С# и приблизительно не столь гибок.
В нем каждая переменная имеет фиксированныйтип. Когда вы абонируете почтовый ящик, вы выбираете ящик интересующего вас размера. Если вы выбрали ящик "для целых чисел", не стоит надеяться, что туда сможетпоместиться строка.В примере в предыдущем разделе вы выбрали ящик, созданный для работы с целымичислами — С# называет их i n t . Целые числа — это числа, применяющиеся для перечисления (1, 2, 3 и т.д.), а также 0 и отрицательные числа1, -2, - 3 . .
.Перед тем как использовать переменную, ее надо объявить. После того как выобъявили переменную как i n t , в нее можно помещать и извлекать из нее целые значения, что продемонстрировано в следующем примере:// О б ъ я в л я е мi n t П;58переменнуюпЧасть II.
Основы программирования в С#// Объявляем переменную m и и н и ц и а л и з и р у е м ее з н а ч е н и е м 2int m = 2 ;// Присваиваем з н а ч е н и е , х р а н я щ е е с я в т, п е р е м е н н о й пп = т,Первая строка после комментария является объявлением, которое создает небольшуюобласть в памяти с именем п, предназначенную для хранения целых значений. Начальное значение п не определено до тех пор, пока этой переменной не будет присвоено некоторое значение.
Второе объявление не только объявляет переменную m типа i n t , нои инициализирует ее значением 2.Термин инициализировать означает присвоить начальное значение. Инициализация переменной заключается в первом присваивании ей некоторого значения.Вы ничего не можете сказать о значении переменной до тех пор, пока она небудет инициализирована.Последняя строка программы присваивает значение, хранящееся в m (равное 2), переменной п. Переменная п будет хранить значение 2, пока ей не будет присвоено новое значение (в частности, она не потеряет свое значение при присваивании его переменной т).Правила о б ъ я в л е н и я п е р е м е н н ы хВы можете выполнить инициализацию переменной как часть ее объявления:// Объявление п е р е м е н н о й т и п а// начального з н а ч е н и я 1int 0 = 1 ;intс п р и с в а и в а н и е м ейЭто эквивалентно помещению 1 в ящик i n t в момент его аренды, в отличие от еговскрытия и помещения туда 1 позже.Инициализируйте переменные при их объявлении.
Во многих, но не во всех,случаях С# инициализирует переменные за вас, но рассчитывать на это нельзя.Вы можете объявить переменную в любом месте (ну, или почти в любом) программы.Однако вы не можете использовать переменную до того, как она будет объявлена, и присваивать ей какие-либо значения. Так, следующие два присваивания некорректны:// Это п р и с в а и в а н и е н е в е р н о , п о с к о л ь к у п е р е м е н н о й m не/ / присвоено з н а ч е н и е п е р е д е е и с п о л ь з о в а н и е мint m;n = m;// Следующее п р и с в а и в а н и е н е к о р р е к т н о в с и л у т о г о , ч т о// переменная р не была о б ъ я в л е н а до ее и с п о л ь з о в а н и яр = 2;'int р;И последнее — нельзя дважды объявить одну и ту же переменную.Вариации на т е м у intБольшинство простых переменных имеют тип i n t .
Однако С# позволяет настраиватьцелый тип для конкретных случаев.Глава 3. Объявление переменных-значений59Все целочисленные типы переменных ограничены хранением только целых чисел, но!диапазоны этих чисел различны. Например, переменная типа i n t может хранить только!целые числа из диапазона примерно от -2 миллиардов до 2 миллиардов.Два миллиарда сантиметров — это больше, чем диаметр Земли. Но если этой величи-Вны вам не хватает, С# имеет еще один целочисленный тип, называемый 1опдИ(сокращение от l o n g i n t ) , который может хранить гораздо большие числа ценой уве-шличения размера "ящика": он занимает 8 байт (64 бит) в отличие от 4-битового i n t .В С# имеются и другие целочисленные типы, показанные в табл.
3.1.Как будет рассказано позже, фиксированные значения — такие как 1 — тоже имеюттип. По умолчанию считается, что простая константа наподобие 1 имеет тип i n t . Константы, отличные от i n t , должны явно указывать свой т и п — так, например, 123U(обратите внимание на U) — это константа типа u i n t — беззнакового целого.Большинство целых значений — знаковые (signed), т.е.
они могут представлять наряду с положительными и отрицательные значения. Беззнаковые (unsigned) целые числамогут представлять только неотрицательные значения, но зато их диапазон представления удваивается по сравнению с соответствующими знаковыми типами. Как видно изтабл. 3.1, имена большинства беззнаковых типов образуются из знаковых путем добавления префикса и.1Целых чисел хватает для большинства вычислений. Я считал так до 6 класса и дажене думал, что существуют какие-то другие числа.
Я до сих пор не могу забыть свое по-'трясение в 6 классе, когда учительница рассказала о дробных числах.Множество вычислений требуют применения дробных чисел, которые никак не могутбыть точно представлены целыми числами. Общее уравнение для конвертации температуры в градусах Фарегнейта в температуру в градусах Цельсия демонстрирует это:Напомним, что автор учился в американской школе. — Примеч. пер.60Часть II. Основы программирования в С#// Преобразование т е м п е р а т у р ы 4 5 ° Fint nFahr = 4 1 ;int n C e l s i u s = ( n F a h r - 3 2 ) * ( 5 / 9 ) ;Для некоторых значений данное уравнение работает совершенно корректно.
Например, 41 °F равен 5°С. "Правильно, Девис!" — сказала бы мне учительница в 6 классе.Попробуем теперь другое значение, например 100°F. Приступим к вычислениям:100-32 = 6 8 ; 68 (5/9) дает 37. " Н е т , — сказала бы учительница,— правильный ответ — 37.78". И даже это не совсем верно, так как в действительности правильный ответ—37.777..., где 7 повторяется до бесконечности, но, увы, невозможно написать бесконечную книгу.Тип i n t может представлять только целые числа. Целый эквивалент числа37.78 — 37.
При этом, для того чтобы разместить число в целой переменной,дробная часть числа отбрасывается — такое действие называется усечением(truncation).Усечение — совсем не то же самое, что округление (rounding). Усечение отбрасывает дробную часть, а при округлении получается ближайшее целоезначение. Так, усечение 1.9 даст 1, а округление — 2.Для температур 37 может оказаться вполне достаточно. Вряд ли ваша одежда при37.78°С будет существенно отличаться от одежды при 37°С. Но для множества, если небольшинства, приложений такое усечение неприемлемо.На самом деле все еще хуже. Тип i n t не в состоянии хранить значение 5/9 и преобразует его в 0. Соответственно, данная формула будет давать нулевое значение n C e l sius для любого значения n F a h r . Поэтому даже такой непритязательный человек, какя, сочтет это неприемлемым.На прилагаемом к книге компакт-диске в каталоге C o n v e r t T e m p e r a t u r e W i t h R o u n d O f f имеется программа, использующая целочисленноепреобразование температур.
Пока что вы можете не разобраться со всеми еедеталями, но можете посмотреть на уравнение преобразования и запуститьпрограмму C o n v e r t T e m p e r a t u r e W i t h R o u n d O f f . e x e , чтобы увидетьрезультаты ее работы.Ограничения, накладываемые на переменные типа i n t , для многих приложений неприемлемы. Обычно главным препятствием является не диапазон возможных значений(двух квинтиллионов 64-битового l o n g хватает, пожалуй, для подавляющего большинства задач), а невозможность представления дробных чисел.В некоторых ситуациях нужны числа, которые могут иметь ненулевую дробнуючасть, и которые математики называют действительными числами (real numbers). Всегда находятся люди, удивляющиеся такому названию — неужели целые числа — недействительные?? в С#Глава 3.