型変換(キャスト)
では、今回は型の変換についてみていきましょう。
まず、次のプログラムを見てください。
#include <stdio.h>
int main()
{
printf(“%f\n”, 1/2);
return 0;
}
これは1/2の計算結果を画面上に表示するというごく簡単なプログラムですが、
一体この計算結果はどのように表示されると思いますか?
実は0.000000と表示されてしまうのです。
私達は当然0.5と表示されることを期待している訳ですが、整数と整数の計算結果は整数になるというルールがありまして、小数点以下の数値は問答無用で 切り捨てられてしまうのです。そのため、この計算結果は0となってしまったのです。
では、0.5の結果を得ようと思ったらどうすればよいのでしょうか?答えは簡単!実数同士の演算にしてしまえばよいのです。
printf(“%f\n”, 1.0f/2.0f);
これで、期待通りの0.500000という結果を得ることができました。
また、これ以外にも、型キャストを利用することによって強引に整数値を実数値に変換してしまうという方法もあります。例えば最初のプログラムを次のように書きなおすことによって期待する結果を得ることも可能です。
printf(“%f\n”, (float)1/(float)2);
また、C言語においては、異なる型同士の演算がサポートされています。つまり、整数と実数という異なるデータ型同士の演算も可能ということです。例えばint型とfloat型の計算を行う場合、 int型のデータは自動的にfloat型に変換されることになるのです。このことを型の昇格といいまして、昇格の関係は大雑把に次のようになっています。
char ⇒ int ⇒ long ⇒ float ⇒ double
この型の昇格がサポートされているお陰で、次のように書いても、期待する結果を得ることができます。
printf(“%f\n”, 1.0f/2);
では最後に、型キャストに関する注意事項を話しておきましょう。
例えばchar型からint型への変換は問題ありませんが、逆にint型からchar型へ変換する場合などは注意が必要です。int型という大きいサイズをchar型の小さいサイズに強引に変えてしまう訳ですから、 データが一部損失してしまう可能性があるのです。
では次の例を見てください。
#include <stdio.h>
int main(int, char**)
{
int a=123456;
printf(“%d\n”, (char)a);
return 0;
}
この場合の表示結果は64となってしまい、データが損失していることが確認できます。
ただ、このキャストによりデータが損失してしまうという性質を利用して、
float型から int型にキャストして小数点以下の切り捨てを行うこともできます。
メルマガ登録をお願いします。
素敵な?情報がいつもあなたに届くようになります。(itmnewsの記事が届きます。)お役に立つかどうかわかりませんが頑張りますっ。登録してみてください。