Программирование на Objective-C 2.0
Шрифт:
Никогда не пишите программы, в которых предполагается определенный размер типов данных. Для каждого базового типа данных гарантируются опре-деленные размеры памяти, например, для целого значения отводится не менее 32 бит памяти. Однако на некоторых машинах это не выполняется (см. таблицу В.З в приложении В). Тип float
Для хранения значений, содержащих знаки после запятой (точки), можно ис-пользовать переменные с типом float. Признаком константы с плавающей точкой является присутствие десятичной точки. Можно не указывать цифры до десятичной точки или после нее, но, очевидно, нельзя не указывать одновре-менно обе составляющие. 3., 125.8 и -.0001 являются примерами констант с плавающей
Константы с плавающей точкой можно записывать в виде так называемого экспоненциального представления (scientific notation). 1.7е4 — это значение с плавающей точкой для 1.7 х 104. Значение до буквы е называется мантиссой (mantissa), а значение после е называется порядком (exponent). Порядок, который может быть дополнительно снабжен знаком «плюс» или «минус», представляет степень числа 10 для умножения на мантиссу. Например, в константе 2.25е-3 значение 2.25 — это мантисса, а -3 — порядок. Эта константа представляет значение 2.25 х 10-3, или 0.00225. Букву е, которая отделяет мантиссу от порядка, можно записывать и как прописную, и как строчную букву.
Чтобы вывести значение в экспоненциальном представлении, в строке фор-мата NSLog должны быть заданы символы форматирования %е. Если исполь-зовать символы формата %g, то процедура NSLog сама определит, как выводить значение с плавающей точкой: в обычном форме записи с плавающей точкой или в экспоненциальном представлении. Решение основывается на значении порядка: если он меньше -4 или больше 5, то используется формат %е (экспоненциальное представление), если нет — используется формат %f.
Шестнадцатеричная константа с плавающей точкой содержит ведущие символы Ох или 0Х, после которых следует одна или несколько шестнадцатеричных цифр, затем р или Р, после чего следует двоичный порядок. Например, ОхО.ЗрЮ представляет значение 3/16 х 210 = 192. Тип double
Тип double аналогичен типу float. Он используется, если диапазон, предоставляе-мый переменной типа float, не дает достаточной точности. В переменных, кото-рые объявлены с типом double, можно сохранять примерно вдвое больше цифр, чем с типом float. На большинстве компьютеров для значений типа double ис-пользуются 64 бита.
Если не указано особо, то компилятор Objective-C обрабатывает все кон-станты с плавающей точкой как значения типа double. Чтобы явно задать кон-станту типа float, нужно добавить f или F в конце числа, например, 12.5L
Чтобы вывести значение типа @@ double, можно использовать символы формата %f, %е или %д, как и для значений типа float. Тип char
Переменную типа char можно использовать для хранения одного символа. Чтобы задать символ-константу, нужно заключить символ в апострофы, например, 'а', и '0'. Не следует путать символ-константу с символьной строкой в стиле С, которая содержит любое число символов, заключенных в кавычки. Строка символов, заключенная в кавычки, перед которой поставлен символ — это объект-строка типа NSString.
Примечание. В приложении В описываются методы сохранения символов из расширенных наборов с помощью специальных escape-последовательностей, уникальных символов и так называемых «широких» символов.
Символ-константа '\n' (символ новой строки) является допустимым симво-лом-константой. Обратный слэш (обратная наклонная черта) — это специальный символ в системе Objective-C, который не учитывается как отдельный символ. Компилятор Objective-C интерпретирует '\n' как один символ. Имеются и другие специальные символы, которые инициируются с помощью обратного слэша. Полный список приводится в приложении В. Для вывода значения переменной типа char можно использовать символы формата %с при вызове NSLog. В программе 4.1
используются базовые типы данных Objective-C. #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int integerVar = 100; float floatingVar = 331.79; double doubleVar = 8.44e+11; char charVar = 'W'; NSLog (@"integerVar = %i", integerVar); NSLog (@"floatingVar = %f", floatingVar); NSLog (@"doubleVar = %e", doubleVar); NSLog (@"doubleVar = %g", doubleVar); NSLog (@"charVar = %c", charVar); [pool drain]; return 0; }Вывод программы 4.1 integerVar = 100 floatingVar = 331.790009 doubleVar = 8.440000e+11 doubleVar = 8.44e+11 charVar = 'W'
Во второй строке вывода значение 331.79, присвоенное переменной floatingVar, выводится как 331.790009. Причиной этой неточности является внутреннее представление чисел в компьютере. С таким же типом неточности вы сталкиваетесь при работе с числами на своем калькуляторе. Если разделить 1 на 3 на калькуляторе, в результате получится .33333333 (в конце, возможно, будет еще несколько троек). Эта строка является аппроксимацией одной трети калькулятором. Теоретически число троек бесконечно, но калькулятор может содержать столько цифр, сколько соответствует внутренней точности устройства. Тот же тип неточности возникает и здесь: определенные значения с плавающей точкой не могут быть точно представлены в памяти компьютера. Квалификаторы: long, long long, short, unsigned и signed
Если квалификатор long помещен непосредственно перед объявлением int, то соответствующая целая переменная на некоторых компьютерах имеет расши-ренный диапазон. Пример объявления long int: long int factorial;
Это объявление целой переменной factorial типа long. Как и в случае перемен-ных типа float и double, конкретная точность переменной типа long зависит от компьютерной системы. Во многих системах int и long int имеют одинаковый диапазон и могут использоваться для хранения целых значений до 32 бит (231 — 1, или 2147483647).
Значение константы типа long int формируется путем добавления буквы L (прописной или строчной) в конец целой константы. Между числом и буквой L не допускаются никакие пробелы. Ниже приводится пример объявления переменной numberOfPoints типа long int с начальным значением 131071100: long int numberOfPoints = 131071100L;
Чтобы вывести значение типа long int с помощью NSLog, перед символами форматирования i, о и х в качестве модификатора ставится буква I. Это означает, что символы форматирования %li выводят значения типа long int в десятичном формате, символы %1о — в восьмеричном формате, символы %1х — в шестнадцатеричном формате.
Пример применения типа данных long long: long long int maxAllowedStorage;
Указанная переменная будет иметь заданную увеличенную точность — не менее 64 бит. Для вывода целых значений типа long long вместо одной буквы I в строке NSLog используются две буквы I, как в "%Ш".
Квалификатор long разрешается также использовать перед типом double, например: long double US_deficit_2004;
Константа типа long double записывается в виде константы с плавающей точ-кой с добавлением в конце I или L, например: 1.234e+7L
Чтобы вывести значение типа long double, нужно указать модификатор L %Lf выводит значение типа long double с десятичной точкой, %Le выводит значение в экспоненциальном представлении, при %Lg процедура NSLog выбирает между %Lf и %Le.
Квалификатор short, помещенный перед объявлением int, указывает компи-лятору Objective-C, что определенная переменная используется для хранения относительно небольших целых значений. Переменные типа short экономят память. Это существенно, если программа использует большой объем памяти и количество доступной памяти ограничено.