ここでは数値に対する算術演算について説明します。
二項算術演算子
- +
- 加算
- -
- 減算
- *
- 乗算
- /
- 除算
- //
- 切り捨て除算
- %
- 剰余
- **
- べき乗
+演算子は2つの数値を加算し、-演算子は減算を行います。
>>> 2 + 3
5
>>> 2 + 3.0
5.0
>>> 2 - 3
-1
>>> 2 - 3.0
-1.0
2つの数値の型が異なる場合は、演算に先立ち共通の型に変換されます。共通の型への変換は次の規則によって行われます。これ以降の演算子も、共通の型への変換規則は同じです。
- 一方が複素数型であれば、もう一方も複素数型に変換される。
- そうでなく、一方が浮動小数点数型であれば、もう一方も浮動小数点数型に変換される。
- これら以外はどちらも整数型の場合なので変換の必要はない。
*演算子は2つの数値を乗算します。数値は共通の型に変換された後に乗算されます。
>>> 2 * 3
6
>>> 2 * 3.14
6.28
除算には/(除算:division)と//(切り捨て除算:floor division)の2つがあります。数値は共通の型に変換された後に除算されます。ただし、/による整数同士の除算の結果は常に浮動小数点数になります。これは多くのプログラミング言語と異なります。//は除算の後に切り捨てが行われます。これは除算の結果にfloor関数を実行したものと同様です。整数同士の//による除算の結果は整数です。
>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 3 // 2.0
1.0
ゼロによる除算はZeroDivisionError例外を送出します。
>>> 3 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
%演算子は除算した後の余りになります。数値まず共通の型に変換されます。剰余演算子の結果の符号は常に演算子の右側の符号と同じ(またはゼロ)になります。右側の数値がゼロの場合にはZeroDivisionError例外が送出されます。
>>> 8 % 3
2
>>> 8 % -3
-1
>>> -8 % 3
1
>>> 5 % 1.2
0.20000000000000018
>>> 3.14 % 0.7
0.3400000000000003
**はべき乗演算子です。数値引数はまず共通の型に変換され、結果はその型になります。しかし、左側の被演算子が整数でも右側が被演算子が負なら結果は浮動小数点型になります。べき乗を計算する同様な関数としてpow()があります。
>>> 2 ** 3
8
>>> -1 ** 2
-1
>>> (-1) ** 2
1
>>> 2 ** -2
0.25
>>> 2 ** 0.5
1.4142135623730951
2つ目の結果が-1になるのは左引数の単項演算子よりべき乗演算子の方が結合の優先順位が高いからです。つまり「-1 * 2」は「-(1 * 2)」と同じです。-1の2乗を計算したい場合は3つ目の例のようにします。4つ目の例のように右引数の単項演算子はべき乗演算子より結合の優先順位が高いです。
単項算術演算子
uexpr ::= power | "-" uexpr | "+" uexpr | "~" uexpr
- -
- 単項演算子の-は、引数となる数値の符号を反転します。
- +
- 単項演算子の+を付けたとしても値はなにも変わりません。