LoginSignup
9
3

More than 3 years have passed since last update.

整数同士の除算演算子の挙動 (C言語、C++、Scala、Java、Rust、Go言語、PHP、JavaScript、Perl、Python、Ruby、Elixir)

Last updated at Posted at 2020-08-27

整数での /% の演算子の挙動。

整数を整数で割ったら 整数 vs 浮動小数点数 どっち?

  • -5 / 4-1.25
    • PHP
      • 割り切れないから浮動小数点数
      • C言語派のために intdiv という関数もある
    • Perl
      • 割り切れないから浮動小数点数
      • use integer を宣言するとC言語派に変わる
    • Python
      • 割り切れるか関係なく割り算したら浮動小数点数
      • C言語派のために // という演算子もある
    • Elixir
      • 割り切れるか関係なく割り算したら浮動小数点数
      • C言語派のために div という関数もある
    • JavaScript
      • はじめから整数と浮動小数点数の区別がない
  • -5 / 4-1
    • C言語 / C++ / Scala / Java / Rust / Go言語
      • 静的型付けの言語
  • -5 / 4-2
    • Ruby
      • 仲間はずれ

※2020/09/16 ↑コメントを受けPHPに追記
※2020/09/16 ↑Elixirを追記

負の剰余(割り算の余り %演算子)は vs どっち?

  • -5 % 4-1
    • C言語 / C++ / Scala / Java / Rust / Go言語
      • 静的型付けの言語
    • PHP / JavaScript
    • Elixir
      • %はなくてremを使う
  • -5 % 43
    • Perl
      • use integer を宣言するとC言語派に変わる
    • Python / Ruby

※2020/09/16 ↑Elixirを追記

C言語 / C++ / Scala / Java / Rust / Go言語

  • /
    • 整数を整数で除算すると整数になる
    • 0に近い方に丸められる
  • % (剰余)
    • (a / b * b) + (a % b)a と一致
a b a / b a % b
5 4 1 1
5 -4 -1 1
-5 4 -1 -1
-5 -4 1 -1

PHP

  • /
    • 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
  • % (剰余)
    • (int)(a / b) * b + (a % b)a と一致 (intへのキャストは0に近い方に丸める)
  • intdiv (整数の除算) (2020/09/16 コメントを受け追記)
    • 整数を整数で除算すると整数になる
    • 0に近い方に丸められる
a b a / b intdiv(a, b) a % b
5 4 1.25 1 1
5 -4 -1.25 -1 1
-5 4 -1.25 -1 -1
-5 -4 1.25 1 -1

JavaScript

  • /
    • 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
  • % (剰余)
    • Math.trunc(a / b) * b + (a % b)a と一致 (Math.truncは0に近い方に丸める)
a b a / b a % b
5 4 1.25 1
5 -4 -1.25 1
-5 4 -1.25 -1
-5 -4 1.25 -1

Perl

use integerを宣言していない場合。

  • /
    • 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
  • % (剰余)
    • floor(a / b) * b + (a % b)a と一致 (floorは負の無限大の方向に丸める)
a b a / b a % b
5 4 1.25 1
5 -4 -1.25 -3
-5 4 -1.25 3
-5 -4 1.25 -1

Perl (use integer)

use integerを宣言した場合。

  • /
    • 整数を整数で除算すると整数になる
    • 0に近い方に丸められる
  • % (剰余)
    • (a / b * b) + (a % b)a と一致
a b a / b a % b
5 4 1 1
5 -4 -1 1
-5 4 -1 -1
-5 -4 1 -1

Python

Python3の場合。(2は違う)

  • /
    • 整数を整数で除算すると、常に浮動小数点数になる
  • // (整数除算)
    • 整数を整数で除算すると整数になる
    • 負の無限大の方向に丸められる
  • % (剰余)
    • (a // b * b) + (a % b)a と一致
a b a / b a // b a % b
5 4 1.25 1 1
5 -4 -1.25 -2 -3
-5 4 -1.25 -2 3
-5 -4 1.25 1 -1

Ruby

  • /
    • 整数を整数で除算すると整数になる
    • 負の無限大の方向に丸められる
  • % (剰余)
    • (a / b * b) + (a % b)a と一致
a b a / b a % b
5 4 1 1
5 -4 -2 -3
-5 4 -2 3
-5 -4 1 -1

Elixir

こちらを参照
整数同士の除算演算子の挙動(Elixir) (@torifukukaiou さんの記事)

リンク

多言語シリーズの私の記事

9
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3