- ベストアンサー
C言語についてです。初心者です
あるサンプルプログラムをみていたら次のような書き方がされていました。 int a,b=200; double c; c=1/(double)b; と書かれていました。ここでの(double)bとはどう意味なのですか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 気づいて居られるような気がしますが.. 普通のプログラミング言語では、人為的なコーディングミス対策で同じ型同士でないと演算できない(型ミスマッチエラーとする)ように仕組まれています。 サンプルプログラムの場合、受け側の変数がdouble型であるのでint型の変数を一時的にdouble型へ型変換しているのです。
その他の回答 (4)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
Cでは、int 同士の割り算は、int として計算されます。 また、定数についても規則があり、 ・小数点がない数値は int ・小数点がある数値は(float ではなくて) double と見なされます。 ですから、 c = 1/b; と書かれていると、 ・まず、= の右辺側を計算する。 ・1 は、(小数点のない数値なので)int 型と判断する。 ・b は、int 型の変数と宣言されているので、int。 ・だから、1/b の結果の型は、int (つまり、1/200 == 0) ・これを c に代入する。 ・double の変数に、int の値を代入するときには、 結果を double に変換して(元々が、1 なので、1.0 になる) 代入 となります。 これが、 c = 1/(double)b; だと、 ・まず、= の右辺側を計算する。 ・1 は、(小数点のない数値なので)int 型と判断する。 ・b は、int 型の変数と宣言されているので、int。 ・ただし、(double)b で、「double 型への型変換」が指定されている ・つまり、1/(double)b は、int / double ・この計算は、double 型にあわせてから行われる。 ・だから、1/(double)b の結果は、0.005 となります。 また、冒頭書いたように、定数にも決まりがあり 1 は、int 1. は、double 1.0 も、double です。 従って、 c = 1.0/b; でも全く同じ結果となります。(1.0 は double 型の定数だから) また、明示的なキャストも、関数形の書き方もよく使われます。 c = 1/double(b); と書いた方がわかりやすいでしょう。 さらに、C++なら、 c = 1/static_cast<double>(b); という書式が推奨されます。 いずれにしても、「変数の型を一時的に変える」のではなく、 「変数はそのままで、その値を、別の型に変換したものにする」という意味です。 その意味でも、関数型の書き方( double(b) )のほうが、実情にあっているというわけです。
- digitalian
- ベストアンサー率29% (323/1104)
これは型キャストといいます。「int で宣言された b を一時的に double として扱いなさい。」という意味です。 このプログラムコードの直後に printf ( "%f", c ); と付け加え、( double ) があるときと無いときで実験してみてください。 ここで型キャストをしないと、c は小数点以下が切り捨てられてしまうのがわかると思います。
- skylark_02
- ベストアンサー率55% (5/9)
これは明示的型変換(キャスト)というやつですね。 変数a,bは整数型で宣言されていますので、そのまま計算すると答えが整数型になり小数点以下がカットされてしまいます。 そうならないように変数の前に()付きで型変換を明示することで整数型であった変数bが倍精度浮動小数点型になるようにしています。
- DIooggooID
- ベストアンサー率27% (1730/6405)
ご参考 http://www.media.osaka-cu.ac.jp/~k-abe/2001-JS-OSAKA-U/C.html 演算する場合、型を揃える必要があります。 変数 c は、2行目で double 型宣言されているので、 それに合わせています。