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

Помните школьные основы арифметики? Описанные ниже операторы работают так же.

Арифметические операции
Пример Название Результат
-$a Отрицание Смена знака $a.
$a + $b Сложение Сумма $a и $b.
$a - $b Вычитание Разность $a и $b.
$a * $b Умножение Произведение $a и $b.
$a / $b Деление Частное от деления $a на $b.
$a % $b Деление по модулю Целочисленный остаток от деления $a на $b.
$a ** $b Возведение в степень Результат возведения $a в степень $b. Добавлен в PHP 5.6.

Операция деления ("/") возвращает число с плавающей точкой, кроме случая, когда оба значения являются целыми числами (или строками, которые преобразуются в целые числа), которые делятся нацело - в этом случае возвращается целое значение.

При делении по модулю операнды преобразуются в целые числа (удалением дробной части) до начала операции.

Результат операции остатка от деления % будет иметь тот же знак, что и делимое — то есть, результат $a % $b будет иметь тот же знак, что и $a. Например:

<?php

echo (3)."\n";           // выводит 2
echo (% -3)."\n";          // выводит 2
echo (-3)."\n";          // выводит -2
echo (-% -3)."\n";         // выводит -2

?>

Также вы можете ознакомиться с разделом документации Математические функции.

Коментарии

It is time for PHP to distinguish between the Reminder and the Modulus and define them correctly mathematically.

Let us assume that we have two integers a and b. Then, the reminder (denoted by r) of a (the dividend) divided by b (the divisor) should merely satisfy the equation a = q*b + r, where q is the quotient.

In case of modulus, however, it refers to a finite set originated by b, that is {0, 1, 2, ..., b-1}. The result of the modulus operation must be an element of that finite set. 
To illustrate, let us assume that a = 5, and b = 3. This means we have a finite set {0, 1, 2}. The modulus operation, a mod b or 5 mod 3, must return 2. Think about it as a loop on the elements of the set for a times, in this case 5 times.
If a = 0, then it returns 0.
If a = 1, then it returns 1.
If a = 2, then it returns 2.
If a = 3, then it returns 0.
If a = 4, then it returns 1.
If a = 5, then it returns 2.
And so on so forth. It is forward loop.

If a is negative, then it means backward or reverse loop.
If a = -1, then it returns 2.
If a = -2, then it returns 1.
If a = -3, then it returns 0.
If a = -4, then it returns 2.
If a = -5, then it returns 1.
And so on so forth.

If b is negative, then the set is constructed as follows {0, b+1, b+2, b+3, ..., -1}. So, if b = -4, then the set is {0, -3, -2, -1}. a is still the circular index of the loop, so:
If a is positive, then forward loop:
If a = 0, then it returns 0.
If a = 1, then it returns -3.
If a = 2, then it returns -2.
If a = 3, then it returns -1.
If a = 4, then it returns 0.
If a = 5, then it returns -3.
If a = 6, then it returns -2.
If a = 7, then it returns -1.
If a = 8, then it returns 0.
And so on so forth.

If a is negative, then reverse loop.
If a = -1, then it returns -1.
If a = -2, then it returns -2.
If a = -3, then it returns -3.
If a = -4, then it returns 0.
If a = -5, then it returns -1.
If a = -6, then it returns -2.
If a = -7, then it returns -3.
If a = -8, then it returns 0.
If a = -9, then it returns -1.
And so on so forth.

Therefore, the result of the modulo operator % has the same sign as the divisor, not the dividend. And the reminder has the same sign as the dividend. Moreover, though it is good to mind the sign, minding the results is far more important.
The table below summaries the differences:

<?php

  a   
a mod b  a rem b
------+-----+-----------+------------
 
13   |     1     |     1
------+-----+-----------+------------
 
13   | -|    -3     |     1
------+-----+-----------+------------
-
13   |     3     |    -1
------+-----+-----------+------------
-
13   | -|    -1     |    -1
------+-----+-----------+------------

?>
2023-04-12 15:01:31
http://php5.kiev.ua/manual/ru/language.operators.arithmetic.html

    Поддержать сайт на родительском проекте КГБ