2008/05/04 「日」

15: 明示的型変換(キャスト) 

微妙に眠いのですが、頑張って書きました。。。

かなり長くなってしまいました。。。

読みたい方は、【read more...】をクリック。
FC2ブログランキングを見る今日のランキング

DLした方や得をした方は必ず1クリックお願いします。
FC2ブログランキング にほんブログ村 中学生ブログランキング ブログランキング

キャスト演算子を用いて、強制的に型変換を行うものですが、紛らわしい点がありますので、以下に具体的な使い方をまとめます。

(例1)
以下の演算で、double の演算結果を x に得るようにキャストしたい。

double x;
int a = 10, b = 3;
x = a / b; /* x = 3.0 */


この場合、正と正の整数除算で割り切れない場合には、商より小さい最大の整数が結果となるため、「3」になります。

演算結果は x に代入するときに、「2.(2) b)汎整数型 ⇒ 浮動小数点型」の結果、「3.0」になります。

ですから、double の結果を得るには、int の a と b をdouble でキャストすればいいわけです。

x = (double) a / (double) b; /* x = 3.333333 */

しかし、上記「3.通常の算術型変換 2」より、a か b の一方が double なら他方も double に変換されるので、通常は

x = (double) a / b; /* x = 3.333333 */

とします。

このとき、気を回して、

x = (double) (a / b); /* x = 3.0 */

とすると、キャスト演算より、() の方が優先順位が高いので、先に int / int が行われ、キャストの意味がありません。

(例2)
以下の演算で、double の演算結果を x に得るようにキャストしたい。

double x;
int a = 10, b = 3, c = 5, d = 2;
x = a / b + c / d; /* x = 5.0 */


この場合、右辺は int の演算ですから、小数部は捨てられ「5」になり、x に代入するときに、「5.0」になります。

右辺を double でキャストすればいいわけですが、

x = (double) a / b + c / d; /* x = 5.333333 */

では、2項+演算子よりも / 演算子の方が優先順位が高いので、(double) a / b の結果とc / d の結果が加算されることになり、正しい結果を得られません。

この場合には、c / d の方もキャストしなければなりません。

x = (double) a / b + (double) c / d; /* x = 5.833333 */

疲れました...or2
コメントの投稿













管理者(7258)にだけ表示を許可する
当ブログのバナー
相互リンク募集中です^^
RSS登録
Archive
検索系

Yahoo!ボットチェッカー
Googleボットチェッカー
MSNボットチェッカー
初音ミク
アイテム
ブログパーツ
ブログパーツ
フィードメーター - World 7258 Web


ページランク
track feed
BBS7.COM
MENURNDNEXT
状況
広告