Арифметические операции в Perl

Что в языках программирования называют операцией?

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

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

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

Бинарные арифметические операции

В языке определено шесть бинарных арифметических операций, которые представлены в табл. 1.

Таблица 1. Бинарные арифметические операции

Операция Знак Пример Результат
Сложение + 3.14+123;
"3.14"+"123";
"3.14"+123;
126.14
126.14
126.14
Вычитание - 3.14-123;
"3.14"-"123";
"3.14"-123;
-119.86
-119.86
-119.86
Умножение * 3.14*123;
"3.14"*"123";
"3.14"*123;
"31"*12;
386.22
386.22
386.22
372
Деление / 3.14/123;
"3.14"/"123";
"3.14"/123;
"31"/12
0.0255284552845528
0.0255284552845528
0.0255284552845528
2.58333333333333
Остаток от деления целых чисел % 127%123;
"127"%123;
"127.58"%"123";
"127.58"%123.98;
4
4
4
4
Возведение в степень ** 2.5**3;
"-2.5"**3;
"+2.5"**"-3";
"-2.5"**(-3);
2.5**(-3,01)
15.625
-15.625
0.064
-0.064
0.0634162524282757

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

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

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

  $m = (-2.5)**(3.01); # Переменная $m содержит -2147483648

Как отмечалось ранее, в бинарных арифметических операциях Perl позволяет использовать строки, не содержащие правильные числовые литералы. В этом случае интерпретатор попытается выделить, начиная с первого символа, из содержимого строки число и использовать его в качестве соответствующего операнда заданной операции. Если не удается выделить правильный числовой литерал, то операнд принимает значение, равное 0. Продемонстрируем использование строковых операндов:
 
  "3fl4" + "12-30"; (результат: 15 (3+12));
  "а120" - "12-30"; (результат: -12 (0 - 12)); 
  "а120" * "-0012-30"; (результат: 0) (0 * (-12)).

Унарные арифметические операции

В Perl существуют две унарные арифметические операции - "плюс" (+) и "минус" (-), которые применяются к любым скалярным значениям.

Арифметическая операция "унарный плюс" (+) не оказывает никакого эффекта ни на числовое, ни на строковое значение.

"Унарный минус" (-) выполняет арифметическое отрицание числового операнда. Это означает, что если число было отрицательным, то оно станет положительным, и наоборот. Если операндом является идентификатор, то результатом выполнения этой операции будет строка, состоящая из символа -, за которым следует идентификатор, то есть если в тексте программы встречается, например, выражение -word, то результатом выполнения операции унарного минуса в атом случае будет строка "-word". Если операндом является строка, начинающаяся с символа минус или плюс, то результатом также будет строка, в которой минус заменен на плюс и наоборот. Если строка не начинается с плюса или минуса, операция унарного минуса добавляет его первым символом в строку. Перечислим случаи использования операции унарного минуса:


  print -'12.09';  # результат: -12.09;
  print -(-12.09); # результат: 12.09;
  print -id;       # результат: '-id';
  print -'+id;     # результат: '-id';
  print -"-id;     # результат: "+id";
  print -'al20;    # результат: '-а120'.

Операции увеличения и уменьшения

Операции увеличения (++) и уменьшения (--) на единицу соответственно увеличивают или уменьшают на единицу значение своего операнда. Существует две формы этих операций: префиксная, когда знак операции стоит перед операндом, и постфиксная - знак операции ставится после операнда; эти формы отличаются семантикой использования. Префиксные операции увеличения и уменьшения сначала соответственно увеличивают или уменьшают значение своего операнда, а потом используют его в вычислениях. Постфиксные формы этих операций, наоборот, сначала используют в выражениях значения своих операндов, а потом увеличивают или уменьшают их значения на единицу. Так как операции увеличения/уменьшения выполняют также и операцию присваивания своему операнду нового значения, то в качестве операнда может использоваться только числовая переменная.


  $n = 10.7;         - начальное значение
  $inf1 = --$n;      - результат: $inf1 = 9.7, $n = 9.7; 
  $inf2 = ++$n;      - результат: $inf2 = 10.7, $n = 10.7;
  $post1 = $n--;     - результат: $post1 = 10.7, $n = 9.7;
  $post2 = $n++;     - результат: $post2 = 9.7,$n = 10,7;


К содержанию

 
Скачать новую версию данного учебника в одном архиве

Курс находится в процессе разработки, поэтому архив постоянно обновляется!




 
Hosted by uCoz