C++入門/型

型について説明する.浮動小数点数の節などで説明していた,int, double, char などは型と呼ばれる.C++ では型により適用する演算が区別されるようにできているため,所望の結果を得るためには型をよく意識してプログラムを記載しなくてはならない.以下に主な方を列挙する.

浮動少数点数については込み入っていて分かりづらく,実際に使われている方式はさらに複雑なので,とりあえず小数点付きの数があわらせると思っておけば大丈夫である.真理値型は少し特別である.

どの型を見ても,ほとんど数値を格納することにしか使えないため,最悪 double だけあれば良いのであるが,回数を数えるなどの用途で小数点の表現は無駄であり混乱を招くため,整数値もあったほうがいい.浮動小数点数型を使って小数点以下を切り捨てて考えれば整数型は必要ないだろうと思うかも知れないが,すべての場合においてそのような暗黙的なことを想定していては,物理的な計算機を設計する際に大きな足かせとなる.Python などはそういったことにもある程度対応してくれるが,その分 C++ に比べ何十倍も実行速度が遅い.まずは,厳密な処理方法を決定し,必要ならばそれを拡張していくという方法をC++では取る.具体的な拡張方法はクラスの節で説明する.初学者は数値の計算からはじめ,プログラムの制御機構に慣れたほうが良い.

型の変換は,型名(変換元) のように行う.以下に型の変換を行う例を示す.7行目などで double(b)と書いてある場所がそうで,この例では,整数値型の b の値を受取,double へ変換した後除算を実行するようになっている.6行目と異なり,7行目では小数点以下の結果が保存される.12行目では真理値型を使った条件式の表現を示している.14行目で真理値が更新される.

#include <iostream>

int main(){
    int a=2;
    int b=1;
    double c = b/a;  // 整数の割り算では小数点以下が考慮されない
    double d = double(b)/a;  // double へ変換したため,double 型として除算が実行される
    std::cout << c << char(32) << d << char(10); // 空白と改行

    bool l = true;
    char cA = 97;
    while(l){
        std::cout << cA << ' '; // ' ' は char(32)と同じ
        l = cA < 112;
        cA = cA + 1;
    }
    cA = 10; // 改行
    std::cout << cA;
    return 0;
}

出力の例を以下に示す.

hiroki@hiroki-home:~/git/cpp$ g++ c.cpp hiroki@hiroki-home:~/git/cpp$ ./a.out 0 0.5 a b c d e f g h i j k l m n o p

真理値型の使い方についてもう少し紹介する.int や double と同じく,代入演算子の右辺に式(論理式)を書くことで,真理値の変数の状態を更新することができる.このことを用いれば,次に示すように,繰り返しの中で真理値を更新することが可能となる.これは,2乗してaとなる数が存在するかどうか探すプログラムである.全く不十分ではあるが,発想力が乏しく申し訳ないが,参考にしてもらいたい.このような存在を確かめる手続きを書く機会はこの先多くあるだろう.

#include <iostream>

int main(){
    int a=4;

    bool l = false;
    int i=0;
    while(i < 10){
        l = l or i*i == a;
        i = i + 1;
    }

    if(l){
        std::cout << 1 << '\n';
    }else{
        std::cout << 0 << '\n';
    }
    return 0;
}

出力は次のとおりである.i*i = 4となるiが見つかったようである.

hiroki@hiroki-home:~/git/cpp$ g++ c.cpp hiroki@hiroki-home:~/git/cpp$ ./a.out 1

float と double についてであるが,精度が2倍以上 double のほうが高いため,初学者は double を使っておくと良い.ただ,3D CG (3-dimensional computer graphics)など幾何学を計算する場合は大体 float で十分である.

整数値については,2^{31}というのはおよそ20億くらいだったと思うが,これは現代の常識で言えば少し足り無いことが多い.以下にいくらか他の整数値型を示す.int64_t を使っておけば当分は大丈夫である.特に理由がないならint64_tを使うべきである.ただしマイコンの設計はこの限りではない