Кочан Стивен - Программирование на Objective-C 2.0 стр 8.

Шрифт
Фон

Если для w1 и w2 заданы соответственно шестнадцатеричные значения 5е и d6, то операция исключающего ИЛИ, примененная к w1 и w2, даст в результате шестнадцатеричное значение е8, как показано ниже. w1 0000 0000 0101 1110 0х5е w2 0000 0000 1011 0110 ^ 0xd6 0000 0000 1110 1000 0хе8 Оператор дополнения до единицы

Оператор дополнения до единицы (ones complement) это унарный оператор, который меняет биты операнда на противоположные. Каждый бит, равный 1, изменяется на 0, и каждый бит, равный 0, изменяется на 1. Таблица истинности приводится здесь просто для полноты изложения. b1~b1 0 1 1 0

Если переменная w1 имеет тип short int, имеет длину 16 бит и для нее задано шестнадцатеричное значение a52f, то применение к этому значению операции дополнения до единицы даст в результате шестнадцатеричное значение 5аb0. w1 1010 0101 0010 1111 0xa52f ~w1 0101 1010 1101 0000 0x5ab0

Операцию дополнения до единицы полезно использовать, если вы не знаете размера в битах значения, к которому применяется какая-либо операция, и его использование может сделать программу менее зависимой от конкретного размера целого типа данных. Например,

сдвиг значения влево или вправо на число позиций, равное или превышающее количество бит этого значения, то Objective-C не дает определенный результат. Например, на машине, представляющей целое значение 32 битами, сдвиг целого значения влево или вправо на 32 или больше битов не обязательно даст определенный результат. Если указана отрицательная величина смещения, то результат тоже неопределенный. 4.6. Типы: _Bool, .Complex и .Imaginary

Завершая эту главу, упомянем еще три типа: _Bool, для работы с булевыми зна-чениями (0 или 1), .Complex и .Imaginary для работы с комплексными и мнимы-ми числами соответственно.

Программисты Objective-C обычно используют тип данных B00L вместо .Bool для работы с булевыми значениями. В действительности это не тип данных, а еще одно имя для типа данных char. Его определяют с помощью специального ключевого слова typedef, которое описывается в главе 10. Упражнения

Какие из следующих констант являются недопустимыми? Почему? 123.456 0x10.5 0X0G1 0001 OxFFFF 123L 0ХаЬО5 0L -597.25 123.5е2 .0001 +12 98.6F 98.7U 17777s 0996 -12Е-12 07777 1234uL 1.2Fe-7 15,000 1.234L 197u 100U OXABCDEFLOxabcu +123

Напишите программу, которая преобразует 27° по Фаренгейту (F) в градусы Цельсия (С) с помощью следующей формулы: С = (F 32) / 1.8

Какой вывод даст следующая программа? #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; char c, d; c = 'd'; d = c; NSLog (@"d = %c", d); [pool drain]; return 0; }

Напишите программу для вычисления полинома. Зх<sup>3</sup> 5х<sup>2</sup> + 6, для х = 2.55.

Напишите программу для вычисления выражения и вывода результатов (для вывода результатов используйте формат экспоненциального представления). (3.31 х 10<sup>-8</sup> + 2.01 х 107) / (7.16 х 10<sup>-5</sup> + 2.01 х 10<sup>-8</sup>)

Комплексные (Complex) числа содержат две части: вещественную (real) и мни-мую (imaginary). Если а это вещественная часть, а b мнимая часть, то для представления такого числа используется форма записи а + b i Напишите программу на Objective-C, которая определяет новый класс с именем Complex. Соблюдая принцип, описанный для класса Fraction, опреде-лите для своего нового класса следующие методы. -(void) setReal: (double) а; -(void) setlmaginary: (double) b; -(void) print; // вывод как a + bi -(double) real; -(double) imaginary; Напишите программу, чтобы протестировать новый класс и методы.

Вы разрабатываете библиотеку процедур для работы с графическими объек-тами. Начните с определения нового класса с именем Rectangle (Прямоугольник). Разработайте методы задания ширины и высоты прямоугольна, считывания их значений, а также расчета площади (area) и периметра (perimeter) прямоугольника. Предполагается, что объекты-прямоугольники описывают прямоугольники на целочисленной сетке, например, на экране компьютера. В данном случае ширина и высота прямоугольника являются целыми значениями. Ниже приводится секция @interface для класса Rectangle: @interface Rectangle: NSObject { int width; int height; } -(void) setWidth: (int) w; -(void) setHeight: (int) h; -(int) width; -(int) height; -(int) area; -(int) perimeter; @end Напишите секцию implementation и программу для тестирования вашего но-вого класса и методов.

Модифицируйте методы add:, subtract:, multiply: и divide: для программы 4.6, чтобы считывать результирующее значение сумматора (accumulator). Выполните тестирование этих новых методов.

Закончив упражнение 8, добавьте следующие методы к классу Calculator и выполните их тестирование. -(double) changeSign; // изменение знака сумматора -(double) reciprocal; // 1/(значение сумматора) -(double) xSquared; // квадрат сумматора

Добавьте методы работы с памятью для класса Calculator в программе 4.6. Реализуйте следующие объявления методов и выполните их тестирование.-(double) memoryClear; // очистка памяти -(double) memoryStore; // запись в память значения сумматора -(double) memoryRecall; // чтение в сумматор значения памяти -(double) memoryAdd; // добавление значения сумматора к памяти -(double) memorySubtrac // вычитание значения сумматора из памяти Каждый из этих методов должен возвращать значение сумматора.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке