6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++における負の整数の割り算および余りについて

Last updated at Posted at 2018-02-05

このメモはC++で整数abに対して a / ba % b を実行する際、abが負の数だったときどうなるのかを調べてみた結果です。

ネット上のドキュメントを見ると、
Arithmetic operators - http://en.cppreference.com/w/cpp/language/operator_arithmetic
に書いてありました。その内容から引用すると、

  • 割り算は実装依存の方向に丸められる。(C++11まで)
  • 割り算は0の方へ丸められる(分数の部分は捨てる)。(C++11から)
  • a / b が表現可能であれば (a/b)*b + a%b == a が成り立つ。

ということで、C++11以降に準拠しているコンパイラであれば負の整数で割り算や余りの計算ができるようです。

そこで、簡単な実験をしてみました。

#include <iostream>

void test(volatile int a, volatile int b) {
    volatile int res = a / b;
    std::cout << a << " / " << b << " = " << res << std::endl;
}

int main() {
    test(5, 3);
    test(5, -3);
    test(-5, 3);
    test(-5, -3);
}

一応、コンパイル中でなく実行時に計算しておこうと思ったため volatile をつけています。

これを

  • OS: Ubuntu 16.04
  • コンパイラ: GCC 7.2.0
  • オプション: -std=c++17

で実行した結果、

5 / 3 = 1
5 / -3 = -1
-5 / 3 = -1
-5 / -3 = 1

と予定通りの結果が返ってきました。
このようにコンパイラがしっかりしていれば負の整数でも気にせず計算はできるようです。(そう言いつつ自分は使っていない。)

6
3
1

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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?