【C言語】型キャストしなかった結果…… 【C言語】型キャストしなかった結果…… – みなためラボ

【C言語】型キャストしなかった結果……


文字サイズ:?? (px)

問題のプログラム

みなため

どうも! みなため(@MinatameT)です。

この記事は、私の失敗体験を参考にして作成したものです。ぜひ、反面教師にしてください。

それでは、次のソースコードをご覧ください。

#include<stdio.h>

int main(void)
{
  double x;

  x = 1 + (1/2);

  printf("x = %f\n",x);

  return(0);
}

double型(小数点以下の値も扱える)の変数xに、1 + (1/2) の値を代入し、その結果を表示するものです。

このプログラムの実行結果はどうなると思いますか?

ここで、「1 + (1/2) = 1 + 0.5 = 1.5」と考えた方は危険です。算数的な計算自体はそれで合っているのですが……。

実は、実行結果は次のとおりになります。

x = 1.000000

そう、1/2(0.5)が加算されていませんね。なぜだと思いますか?

この原因は「型キャスト」をしていないからです。型キャストとは、int型をfloat型にしたり、double型をint型にしたりすることです。変数の型の変換ですね。

上記のプログラムでは、1/2を型キャストしていなかったので、(この場合は)0.5の小数点以下の部分が無視され、0になってしまっていたのです。

この問題を解決するために、上記のプログラムを修正してみます。

問題のプログラムの修正

さて、問題のプログラムを修正してみました。

#include<stdio.h>

int main(void)
{
  double x;

  x = 1 + ((double)1/2);

  printf("x = %f\n",x);

  return(0);
}

(1/2) を ((double)1/2) とすることで、小数点以下を残してくれるようになります! これが型キャストです。

すると、実行結果は次のようになります。

x = 1.500000

見事に、正しい計算ができました!

このように、型キャストの有無によって実行結果が大幅に変わってしまうことがよくあります。

キャラクター

皆さんも、型キャストを忘れないようにしましょう。

記事本文下のバナー広告

この記事をSNSでシェアする

 

プログラミングカテゴリーの最新記事(5件)

管理人のTwitter

Tweets by MinatameT

内部リンク集

広告枠のレンタルの詳細はこちら!
記事作成のご依頼の詳細はこちら!