Арифметические операторы

Арифметических операторов в ActionScript пять. Четыре из них (операторы суммирования «+», умножения «*», деления «/», разности «—») полностью соответствуют своим математическим аналогам, поэтому специально мы их описывать не будем, рассмотрев только наиболее неочевидные особенности работы с ними. Пятый арифметический оператор « %», отвечающий за деление по модулю, будет изучен отдельно.

При использовании арифметических операторов система активно осуществляет автоматическое преобразование типов данных. При этом она всякий раз, когда это возможно, пытается привести нечисловой объект данных к типу number. Например:

trace("20"/"5"); // Выводит: 4 (строки преобразуются в числа)
trace[1+true); // Выводит: 2 (булева величина true преобразуется в 1)
trace(null+true); // Выводит: NaN (null преобразуется в NaN, true - в l)

Впрочем, строки, использующиеся в качестве операндов арифметических операторов, не всегда переводятся в числа. Это связано с тем, что оператор «+» является перегруженным, обозначая операции сложения чисел и конкатенации строк. Операция конкатенации имеет больший приоритет, чем сложение чисел, поэтому если одно из слагаемых является строкой, а второе числом, то число преобразуется в строку, а не наоборот.

В арифметических операциях могут использоваться не только десятичные, но и восьмеричные и шестнадцатеричные числа:

trace(0xFA12/05661); // Выводит: 21.3892415636485
// (шестнадцатеричное число делится на восьмеричное)

В арифметических операциях можно использовать не только числовые литералы, но и некоторые специальные величины, такие как Infinity (бесконечность), Number.MAX_VALUE (максимальное представимое число), Number.MIN_VALUE (минимальное представимое число), NaN (неопределенность).


Например:

trace(Infinity/Number.MAX_VALUE); // Выводит: Infinity ( ∞ бесконечно
// больше любого конечного числа)
trace(Number.MAX_VALUE*Number.MIN_VALUE); // Выводит: 8.83178419700125е-16
trace(Infinity*0); // Выводит: NaN (такое произведение не определено)

Специальные значения могут часто возвращаться в качестве ответов при использовании арифметических операторов. Особенно это касается операции деления, имеющей несколько тонких особенностей:

trace(1/0); // Выводит: Infinity
trace (0/0); // Выводит: NaN (такое отношение не определено)
trace("а"*"b"); // Выводит: NaN (недопустимые операнды)

Знаками «+» и «-», помимо бинарных арифметических операций, обозначаются унарные операции задания знака числа. Унарный минус используется очень часто, унарный плюс — нет, так как по умолчанию все числа считаются положительными.

Впрочем, и ему можно найти полезное применение, так как он позволяет произвести преобразование в числовой формат минимальным количеством набранного текста:

trace(+"0.6784e-3"); // Выводит: 0.0006784 (одним знаком строка была
// переведена в число)
trace(typeof - true); // Выводит: number (-true интерпретируется как -1]

Помимо простых арифметических операторов, имеются операторы, совмещающие арифметические действия с присваиванием («++», «--», «+=», «-=», «/=», «*=»).


О них мы поговорим, когда будем разбирать операторы присваивания.

Оператор « %», вычисляющий остаток от деления одного числа на другое, не находит отображения в традиционной математике. Его появление в ActionScript связано с «наследством» от языка С, дальним родственником которого (через JavaScript, Java. C++) изучаемый нами язык является.

Пример использования « %»:

trace(5%3); //Выводит: 2 (5=3*1+2)

В случае, если первый операнд меньше второго, оператор « %» просто возвращает его значение:

trace(2%5); // Выводит: 2

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

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

trace(10%9.9); // Выводит: 0.0999999999999996 (правильный ответ - 0.1)
trace(10%4.4); // Выводит: 1.2 [верный результат)

Необходимость поиска остатка от деления лежит в основе многих важных алгоритмов. Поэтому оператор « %» достаточно значим для практики.


В качестве примера приведем функцию, определяющую, является ли число простым (простым называется число, делящееся нацело только на 1 и на себя):

function prost(a:Number):Boolean {
// Перебираем все целые числа, большие 2, но меньшие половины исследуемой
// величины (большие значения не могут быть ее множителями)
for (var i = 2; i<=Math.round(a/2); i++) {
// Если на какое-то из чисел а делится без остатка, то возвращаем false —
// число простым не является
if (a%i = 0) {
return false;
}
}
// Если функция не завершится до этой строчки, то, значит, не было найдено
// ни одного делителя
return true;
}
trace(prost(131)); // Выводит: true
trace(prost(1111111111)); // Выводит: false

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Виды операторов
Логические операторы
Операторы равенства и сравнения
Поразрядные операторы
Служебные операторы

Вернуться в раздел: Action Script / 5. Операторы