C/C++

2021は偶数? Part4


Part1: https://tomiylab.com/2021/01/2021-iseven-num-p1/
Part2: https://tomiylab.com/2021/01/2021-iseven-num-p2/
Part3: https://tomiylab.com/2021/01/2021-iseven-num-p3/

花子「C++でもさっきのPythonと同じことをしてみよう。」
太郎「でも、C++じゃPythonみたいに値の型を調べれないよ。」
花子「じゃあ、変数に入れればいいじゃない?」
太郎「でも、C++で変数を使うときは明示的に型を示さないといけないよ。」
花子「こんなふうにすれば、いいじゃない。」

#include <iostream>
#include <typeinfo>

int main() {

    int a = 12;
    int b = 3;
    std::cout << typeid(a / b).name() << std::endl;
    std::cout << a / b << std::endl;

    return 0;
}

太郎「そうだね!」
太郎「これで計算結果の型が確認できるね。」
太郎「実行してみると…」

$ clang++ showType.cpp -std=c++17
$ ./a.out
i
4
$ g++ showType.cpp -std=c++17
$ ./a.out
i
4

太郎「”a / b”の型はiってことはintだね。」
太郎「Pythonはint ÷ int はfloatだったけど…」
太郎「C++じゃあintになるんだね!」
花子「そうだよ。」
花子「だから一番最初のプログラムで「2021 ÷ 2 = 1010」ってなった原因もわかったよね?」
太郎「うん。」
太郎「「2021 ÷ 2 = 1010.5」なんだけど、1010.5がint型に変換されて1010になってしまうってことだよね!」
花子「ほんとにそうなのかな?」
太郎「どゆこと?」
花子「「2021 ÷ 2 = 1010.5」になって1010.5がint型に変換されるんじゃなくて、初めから「2021 ÷ 2 = 1010」なんじゃないかな?」
花子「これを実行してみて。」

#include <iostream>

int main() {

    int a = 2021;
    int b = 2;
    double c = a / b;
    std::cout << typeid(c).name() << std::endl;
    std::cout << c << std::endl;

   return 0;
}

太郎「うん。」

$ clang++ showType.cpp -std=c++17
$ ./a.out
d
1010
$ g++ showType.cpp -std=c++17
$ ./a.out
d
1010

太郎「花子さんの言う通りだね!」
太郎「でも、細かいこと気にしすぎだよ。」
花子「何言ってるの?」

To Be Continued…

コメント

タイトルとURLをコピーしました