Expressions And Operators: Arithmetic
Hack provides the standard arithmetic operators. These only operate on numeric types: int or float.
Addition
The operator + produces the sum of its operands.
If both operands have type int, the result is int. Otherwise, the
operands are converted to float and the result is float.
-10 + 100; // int with value 90
100 + -3.4e2; // float with value -240
9.5 + 23.444; // float with value 32.944
Subtraction
The operator - produces the difference of its operands.
If both operands have type int, the result is int. Otherwise, the
operands are converted to float and the result is float.
-10 - 100; // int with value -110
100 - -3.4e2; // float with value 440
9.5 - 23.444; // float with value -13.944
Multiplication
The operator * produces the product of its operands.
If both operands have type int, the result is int. Otherwise, the
operands are converted to float and the result is float.
-10 * 100; // int result with value -1000
100 * -3.4e10; // float result with value -3400000000000.0
Division
The operator / produces the quotient from dividing the
left-hand operand by the right-hand one. Dividing by 0 will produce
an exception.
If both operands have type int, and the result can be represented
exactly as an int, then the result is an int. Otherwise, the result is float.
300 / 100; // int result with value 3
100 / 123; // float result with value 0.8130081300813
12.34 / 2.3; // float result with value 5.3652173913043
Modulo
The operator % produces the int remainder from dividing the
left-hand int operand by the right-hand int operand. If the right
hand side is 0, an exception is thrown.
5 % 2; // int result with value 1
Exponent
The operator ** produces the result of raising the value of its
left-hand operand to the power of the right-hand one.
If both operands have non-negative integer values and the result can be represented as
an int, the result has type int; otherwise, the result has type float.
2 ** 3; // int with value 8
2 ** 3.0; // float with value 8.0
2.0 ** 3.0; // float with value 8.0
Unary Plus
The unary plus operator + requires an int or float value, but
has no effect. It exists for symmetry.
The following are equivalent:
$v = +10;
$v = 10;
Unary Minus
The unary minus operator - requires an int or float value, and
returns the negated value.
$v = 10;
$x = -$v; // $x has value -10
Note that due to underflow, negating the smallest negative value produces the same value.