型変換

 まず最初に、以下のプログラムを書いて、実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int a;
    int b;
    double result;
    
    a = 3;
    b = 2;
    result = a / b;
    
    printf("result = %f\n", result);
    
    return 0;
}

 Tips:小数型の結果をprintf関数で表示する際は、「%d」ではなく「%f」と指定して下さい。

 上記のプログラムを実行すると、以下のように表示されたかと思います。

result = 1.000000

 「3 / 2」という割り算をしたのですから、1.5という結果が期待された結果だと思います。resultもdouble型(小数型)で定義したわけですから。なのに、表示された結果は1.5ではなく、1.0。どうしてこのようなことになったのでしょうか。

 では、次に、以下のプログラムを書いて、実行して下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int c;
    double d;
    
    c = 1.5;
    d = c;
    
    printf("c = %d\n", c);
    printf("d = %f\n", d);
    
    return 0;
}

 結果は、以下のように表示されます。

c = 1
d = 1.000000

 整数型で定義された変数cに無理矢理、小数を入れました。「d = c;」では、小数型の変数dにcの中身を入れるようにしました。cには1.5を入れたはずですが、cが整数型のため、小数点以下が切り捨てられ、結果的にcは1、dは1.0となります。つまり、イコールの右辺が整数型の場合、左辺の変数が小数型であっても小数点以下が切り捨てられてしまいます。

 最初のプログラムに戻ります。

int a;
int b;
double result;

a = 3;
b = 2;
result = a / b;

 このように計算しました。aとbは整数型です。「a / b」は整数型と整数型の割り算になるので、計算結果も整数型になります。しかし私達は、「3 / 2」の計算結果として1.5を得たいわけです。どうしたらよいでしょうか。

 このとき用いるのが型変換(キャスト)です。最初のプログラムを、以下のように変更して下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int a;
    int b;
    double result;
    
    a = 3;
    b = 2;
    result = (double)a / b;     // 変更箇所(型変換をしています)
    
    printf("result = %f\n", result);
    
    return 0;
}

 下記のとおり、1.5と表示されることを確認して下さい。

result = 1.500000

 上記のプログラムで「(double)a / b」と書いたように、型変換は、「(型)式」という書式で書きます。これにより、整数型と整数型の割り算でも、計算結果を小数型として出してくれます。

■スポンサーリンク

このページの先頭へ