Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

Это выражение эквивалентно следующему: а = а / (b + с)

Операторы присваивания используются потрем причинам. Во-первых, про-грамму проще писать: то, что находится слева от оператора присваивания, не нужно повторять с правой стороны. Во-вторых, результирующее выражение проще читать. В третьих, программы могут выполняться быстрее, поскольку компилятор иногда генерирует более короткий код для вычисления выражения. 4.4. Класс Calculator

Теперь можно определить новый класс. Мы создадим класс Calculator для сложения, умножения, вычитания и деления чисел. Как и обычный калькулятор, он должен следить за промежуточной суммой, которую называют накапливающим сумматором, или просто сумматором (accumulator).

Поэтому соответствующие методы должны позволять вам задавать для сумматора определенное значение, выполнять его сброс (задавать равным нулю) и считывать значение, когда закончатся вычисления. В программе 4.6 содержится определение этого класса и тестовая программа. // Реализация класса Calculator #import <Foundation/Foundation.h> @interface Calculator: NSObject { double accumulator; } // методы для сумматора (accumulator) -(void) setAccumulator: (double) value; -(void) clear; -(double) accumulator; // арифметические методы -(void) add: (double) value; -(void) subtract: (double) value; -(void) multiply: (double) value; -(void) divide: (double) value; @end @implementation Calculator -(void) setAccumulator: (double) value { accumulator = value; ) -(void) clear { accumulator = 0; } -(double) accumulator { return accumulator; } -(void) add: (double) value { accumulator += value; } -(void) subtract: (double) value { accumulator -= value; } -(void) multiply: (double) value { accumulator *= value; } -(void) divide: (double) value { accumulator /= value; } @end int main (int argc, cfiar *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Calculator *deskCalc; deskCalc = [[Calculator alloc] init]; [deskCalc clear]; [deskCalc setAccumulator: 100.0]; [deskCalc add: 200.]; [deskCalc divide: 15.0]; [deskCalc subtract: 10.0]; [deskCalc multiply: 5]; NSLog (@"The result is %g", [deskCalc accumulator]); [deskCalc release]; [pool drain]; return 0; }

Вывод программы 4.6 The result is 50

Класс Calculator имеет только одну переменную экземпляра типа double, со-держащую значение сумматора. Сами определения методов достаточно просты. Обратите внимание на сообщение, которое вызывает метод multiply: [deskCalc multiply: 5];

Этому методу передается целый аргумент, хотя в методе предполагается значение типа double. Здесь нет никакой проблемы, поскольку числовые аргументы, передаваемые методам, автоматически преобразуются в соответствующий предполагаемый тип. Метод multiply: предполагает значение типа double, поэтом при вызове функции целое значение 5 автоматически преобразуется в значение с плавающей точкой двойной точности. Здесь преобразование происходит автоматически, по практика программирования все же рекомендует задавать соответствующие типы аргументов при вызове методов.

В отличие от класса Fraction, где можно работать со многими дробями, в пашей программе, возможно, потребуется работа только с одним объектом Calculator. Имеет смысл определить новый класс, чтобы упростить работу с этим объектом. В какой-то момент вам захочется добавить графический интерфейс к своему калькулятору, чтобы пользователь мог реально щелкать кнопками на экране, как в широко распространенном приложении calculator. 4.5. Битовые операторы

Некоторые операторы в языке Objective-C работают с определенными битами внутри числа. Эти операторы представлены в таблице 4.2.

Табл. 4.2. Битовые операторы Символ Операция & Побитовое И | Побитовое включающее ИЛИ ^ Побитовое исключающее ИЛИ ~ Дополнение до единицы << Сдвиг влево >> Сдвиг вправо

Все операторы из таблицы 4.2, за исключением оператора дополнения до единицы (~), являются бинарными операторами, то есть предполагают два опе-ранда. Битовые операции можно выполнять с

любым типом целого значения, но нельзя выполнять для значений с плавающей точкой. Побитовый оператор И

Если два значения связаны оператором И (&), то двоичные представления этих значений сравниваются бит за битом. Если какой-либо бит первого значения равен 1 и соответствующий бит второго значения равен 1, то соответствующий бит результата равен 1; во всех остальных случаях результат равен 0. Пусть b1 и b2 представляют соответствующие биты в двух операндах. В следующей таблице, которая называется таблицей истинности (truth table), представлены результаты операции И для всех возможных значений b1 и b2. b1 b2 b1 & b2 0 0 0 0 1 0 1 0 0 1 1 1

Например, если w1 и w2 определены с типом short int, w1 присвоено шестнадцатеричное значение 15 и w2 присвоено шестнадцатеричное значение Ос, то в результате следующего оператора переменной w3 присваивается значение 0x04: w3 = w1 & w2;

Чтобы разобраться в этом, нужно представить значения w1, w2 и w3 в виде двоичных чисел. Предполагается, что мы работаем с размером типа short int в 16 бит. w1 0000 0000 0001 0101 0x15 w2 0000 0000 0000 1100 & 0x0c ------------------------------ w3 0000 0000 0000 0100 0x04

Побитовые операции И часто используются для операций маскирования. Этот оператор можно использовать, чтобы задавать нулевые значения для оп-ределенных битов элемента данных. Например, в следующей строке переменной w3 присваивается результат применения операции И к переменной w1 и константе 3. w3 = w1 & 3;

В результате все биты w3, кроме двух правых битов, становятся равными 0, а два правых бита берутся из w1.

Как и для всех бинарных арифметических операторов в Objective-C, бинарные битовые операторы можно использовать как операторы присваивания, добавляя знак равенства. Например, строка word &= 15;

дает такой же результат, как word = word & 15;

то есть присваивает значение 0 всем битам переменной word, кроме четырех правых битов. Оператор побитового включающего ИЛИ

Если два значения связываются операцией побитового включающего ИЛИ (Inclusive-OR) в Objective-C, то происходит сравнение этих двух значений бит за битом. Но на этот раз, если бит первого значения равен 1 или соответствующий бит второго значения равен 1, то соответствующий бит результата равен 1. Ниже показана таблица истинности для оператора включающего ИЛИ. b1 b2 b1 | b2 0 0 0 0 1 1 1 0 1 1 1 1

Если переменным w1 и w2 типа short int присвоены соответственно шестнадцатеричные значения 19 и 6а, то операция включающего ИЛИ, примененная к w1 и w2, даст в результате шестнадцатеричное значение 7Ь, как показано ниже. w1 0000 0000 0001 1001 0x19 w2 0000 0000 0110 1010 | 0x6а --------------------------------------- 0000 0000 0111 1011 0x7b

Эта операция часто используется, чтобы задавать определенные биты слова равными 1. Например, в следующей строке три правых бита переменной w1 за-даются равными 1 независимо от состояния этих битов до выполнения операции. w1 = w1 | 07;

Вместо этой строки можно написать оператор присваивания: w1 |= 07;

Далее мы приведем пример программы с оператором включающего ИЛИ. Оператор побитового исключающего ИЛИ

Оператор побитового исключающего ИЛИ (Exclusive-OR), или оператор XOR, действует следующим образом: если один из соответствующих битов двух опе-рандов равен 1 (но не оба), то соответствующий бит результата равен 1; в про-тивном случае он равен 0. Ниже приводится таблица истинности для этого оператора. b1 b2 b1 ^ b2 0 0 0 0 1 1 1 0 1 1 1 0

Поделиться:
Популярные книги

Алекс и Алекс

Афанасьев Семен
1. Алекс и Алекс
Фантастика:
боевая фантастика
6.83
рейтинг книги
Алекс и Алекс

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Развод. Без права на ошибку

Ярина Диана
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Развод. Без права на ошибку

Бояръ-Аниме. Газлайтер. Том 33

Володин Григорий Григорьевич
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Моров. Том 8

Кощеев Владимир
7. Моров
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Моров. Том 8

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Князь Целитель 2

Ткачев Андрей Юрьевич
2. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 2

Палач

Зайцев Сергей Григорьевич
4. Викс
Фантастика:
фэнтези
7.27
рейтинг книги
Палач

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий