除算演算子・剰余演算子

C言語, C++

演算子 / で除算ができる。

整数同士の除算は、小数点以下を切り捨てられて整数になる。どちらかが浮動小数点数なら、結果も浮動小数点数になる。

整数同士では演算子 % を使って剰余を取得することができる。浮動小数点数では使えない。

% に負の整数を与えたときに結果が正になるか負になるかは、処理系に依存するが、 C99の規格ではJavaの仕様と同じように明確に定められているらしい。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf#page=94

Java / Scala

演算子 / で除算ができる。

整数同士の除算は、小数点以下を切り捨てられて整数になる。どちらかが浮動小数点数なら、結果も浮動小数点数になる。

演算子 % を使って剰余を取得することができる。整数だけでなく、浮動小数点数でも剰余を計算できる。

% の左の数が負だと結果は0か負になる。

System.out.println(5 / (-2));  // => -2
System.out.println(-5 / 2);    // => -2
System.out.println(-5 / (-2)); // => 2
System.out.println(5.3 / 2.1); // => 2.5238095238095237
System.out.println(5 % (-2));  // => 1
System.out.println(-5 % 2);    // => -1
System.out.println(-5 % (-2)); // => -1
System.out.println(5.3 % 2.1); // => 1.0999999999999996

Scalaでも同じ結果になる。

PHP

演算子 / で除算ができる。

整数同士で割り切れる場合に限り結果は整数型になる。それ以外は浮動小数点数型になる。片方でも浮動小数点数型であれば割り切れる場合でも浮動小数点数型になる。

切り捨てて整数にしたければfloorを併用する。

演算子 % で剰余を取得できる。浮動小数点数の場合は、小数点以下を切り捨てて整数にしてから剰余を計算し、結果は常に整数型になる。

echo 5 % (-2); // => 1
echo -5 % (-2); // => -1
echo -5 % 2; // => -1
echo 5.3 % 2.1; // => 1

Python

演算子 / で除算ができる。

Python2では整数同士を / で除算すると、整数を返す。 Python3では、整数同士であってもたとえ割り切れるとしても浮動小数点数を返す。

どちらかが浮動小数点数であればPython2でも浮動小数点数になる。

Python3でPython2のように整数で結果を取得したい場合は // という演算子を使用する。

print(5 / 2)       # => Python2: 2, Python3: 2.5
print(5 // 2)      # => Python3: 2
print(4 / 2)       # => Python2: 2, Python3: 2.0
print(2.5 / 1.2)   # => 2.08333333333
print(2.5 // 1.2)  # => Python3: 2.0

演算子 % で剰余を取得できる。整数だけでなく、浮動小数点数でも剰余を計算できる。

以下はPython2でもPython3でも最後を除いて同じ結果になる。

print(5 % (-3))
# => -1

print(-5 % (-3))
# => -2

print(-5 % 3)
# => 1

print(5.3 % 2.1)
# => 1.0999999999999996
# 自分の環境のPython2では 1.1 になった

負が絡む場合の例

print(5 / 2)   # => Python2: 2,  Python3: 2.5
print(5 / -2)  # => Python2: -3, Python3: -2.5
print(-5 / 2)  # => Python2: -3, Python3: -2.5
print(-5 / -2) # => Python2: 2,  Python3: 2.5

# Python3
print(5 // 2)   # => 2
print(5 // -2)  # => -3
print(-5 // 2)  # => -3
print(-5 // -2) # => 2

# Python2 でも Python3 でも同じ
print(5 % 2)   # => 1
print(5 % -2)  # => -1
print(-5 % 2)  # => 1
print(-5 % -2) # => -1

Ruby

演算子 / を除算ができ、演算子 % で剰余を取得できる。

整数同士の除算は、小数点以下を切り捨てられて整数になる。どちらかが浮動小数点数なら、結果も浮動小数点数になる。

演算子 % に関して、以下は自分の環境での Ruby 1.9.2 と 2.1.5 での実行結果。

puts 5 / (-2)       # => -3
puts -5 / 2         # => -3
puts -5 / (-2)      # => 2
puts 5.3 / 2.1      # => 2.5238095238095237
puts 7.2 / 3.9      # => 1.8461538461538463
puts 5 % (-2)       # => -1
puts -5 % 2         # => 1
puts -5 % (-2)      # => -1
puts 5.3 % 2.1      # => 1.0999999999999996
puts -6.725 / 0.025 # => -268.99999999999994

Perl

演算子 / を使う。割り切れない場合は浮動小数点になる。

整数同士では演算子 % を使って剰余を取得することができる。 % に浮動小数点数を与えても整数にまるめてから剰余が計算される。 % に負の値を入れた場合の挙動はCコンパイラに依るらしい。以下は自分の環境での実行結果。

print(5 / (-2));  # => -2.5
print(-5 / 2);    # => -2.5
print(-5 / (-2)); # => 2.5
print(5.3 / 2.1); # => 2.52380952380952
print(7.2 / 3.9); # => 1.84615384615385
print(5 % (-2));  # => -1
print(-5 % 2);    # => 1
print(-5 % (-2)); # => -1
print(5.3 % 2.1); # => 1
print(-6.725 / 0.025); # => -269

use integerを使うと、浮動小数点数は整数に切り捨てられる。

use integer;
print(5 / (-2));  # => -2
print(-5 / 2);    # => -2
print(-5 / (-2)); # => 2
print(5.3 / 2.1); # => 2
print(7.2 / 3.9); # => 2 # 除算する前に整数に切り捨てられてしまうので...
print(5 % (-2));  # => -1
print(-5 % 2);    # => -1 # use integer使わない場合と符号が反対だ
print(-5 % (-2)); # => -1
print(5.3 % 2.1); # => 1
print int(-6.725 / 0.025); # => -268 # Illegal division by zero というエラーになる

use integerでなくてもintという関数で切り捨ててもよい。

print int(5 / (-2));  # => -2
print int(-5 / 2);    # => -2
print int(-5 / (-2)); # => 2
print int(5.3 / 2.1); # => 2
print int(7.2 / 3.9); # => 1
print int(5 % (-2));  # => -1
print int(-5 % 2);    # => 1 # int使わない場合と符号が同じだ
print int(-5 % (-2)); # => -1
print int(5.3 % 2.1); # => 1
print int (-6.725/ 0.025); # => 268 # 浮動小数点数にしてから整数に丸めているのでint使わない場合と結果が異なる

int 関数 | perldoc.jp
http://perldoc.jp/func/int

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。