Шаг 68.
Операции и выражения. Арифметические операции. Бинарные арифметические операции
На этом шаге мы рассмотрим бинарные арифметические операции.
Все арифметические операции можно разбить на три группы:
Их основное назначение - выполнить определенные вычисления над числовыми данными, но во всех арифметических
операциях в качестве операндов могут выступать и строковые данные, причем не обязательно, чтобы они
конвертировались в числовые данные.
Бинарные арифметические операции
Бинарные арифметические операции - это известные всем четыре арифметических действия:
- сложение (+),
- вычитание (-),
- умножение (*) и
- деление (/),
к которым добавляются еще два:
- остаток от деления двух целых чисел (%) и
- возведение в степень (**).
Примененные к числовым данным или строковым, которые содержат правильные литералы десятичных чисел, они
выполняют соответствующие арифметические действия:
3.14 + 123; # Результат: 126.14
"3.14" + "123"; # Результат: 126.14
"3.14" + 123; # Результат: 126.14
"3.14" * 10; # Результат: 31.4
300 - 200; # Результат: 100
300 / 200; # Результат: 1.5
3 % 2; # Результат: 1
2 ** 3; # Результат: 8
(-2) ** 3; # Результат: -8
2 ** (-3); # Результат: 0.125
2.5 ** 1.5; # Результат: -23.95284707521047
Как видим, бинарные арифметические операции "работают" именно так, как мы привыкли их использовать в обычных
арифметических вычислениях.
Замечания.
- Если операнд в операции получения остатка от деления целых чисел (%) является вещественным числом с
дробной частью, то он преобразуется к целому простым отбрасыванием дробной части, после чего операция
выполняется над целыми числами.
- Нельзя возводить отрицательное число не в целую степень. Если такое случается, то интерпретатор не выдает
никакой ошибки, но результатом такой операции является нуль: (-2.5) ** (1.3) = 0.
В качестве операндов бинарных арифметических операций можно использовать строки, не содержащие правильные числовые литералы.
В этом случае интерпретатор попытается выделить, начиная с первого символа, из содержимого строки число и использовать
его в качестве соответствующего операнда заданной операции. Если не удается выделить правильный числовой литерал, то
операнд принимает значение, равное 0. Подобные ситуации демонстрируются ниже.
"3f14" + "12-30"; # Результат: 15 ("3" + "12")
"a120" + "12-30"; # Результат: 12 ("0" + "12")
"a120" + "-0012-30"; # Результат: -12 ("0" + "-12")
Замечание.
Если установить режим отображения предупреждающих сообщений интерпретатора (ключ -w), то при попытке
использовать в бинарных арифметических операциях строки, не содержащей правильные числовые литералы, будет
отображено сообщение вида:
Argument "a!20" isn't numeric in add at D:\EXAMPLE1.PL line 2.
Бинарные арифметические операции выполняются в скалярном контексте. Это означает, что операндами должны быть
скалярные переменные, а переменные массивов скаляров и хеш-массивов принимают значения, равные, соответственно,
количеству элементов массивов скаляров или количеству использованных в хеш-таблице записей в соответствии с требованиями
скалярного контекста:
@m = (2, 4, 6, 8, 10) ;
%m1 = ( 1 => "a", 2 => "b");
$n = 100;
$n + @m; # Результат: 105 (100 + 5)
@m + %m1; # Результат: 7 (5+2)
Замечание.
В скалярном контексте хеш-массив принимает строковое значение, состоящее из числа использованных участков записей
в хеш-таблице и числа выделенных участков записей, разделенных символом "/". Используемое в арифметических операциях
число получается выделением из этой строки числового литерала, который как раз и соответствует количеству
использованных в хеш-таблице записей.
На следующем шаге мы рассмотрим унарные арифметические операции.
Предыдущий шаг
Содержание
Следующий шаг