• ベストアンサー

int とdoubleの比較

よろしくお願いします。 vc2008でif文の条件として例として以下のように int a = 1; double b = 1.5; if(a < b){} としました。 確か異なる型の比較はまずかったように思うのですが、 このままビルドが通ってしまいました。 特に警告などが出ず、ビルドが通ってしまうのはvc2008が 自動で補正したりしているからなのでしょうか? ご存知の方おりましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> 確か異なる型の比較はまずかったように思うのですが (比較演算も含めて)演算の際は、必要かつ可能ならば暗黙の型変換で型を揃えます。 今回はdoubleとintで、doubleに合せるので、特に問題ありません。 問題になるのは unsigned と signed との比較ですね。 (signed int)-1 > (unsigned int)0 が真になる、等、値の型の範囲を越えている場合におかしく見える現象が起ります。

gyabi
質問者

お礼

比較もdoubleにキャストされると思っていませんでした。 今回は問題なく解決しました、ありがとうございました。

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>確か異なる型の比較はまずかったように思う 勘違いをされてます。

gyabi
質問者

お礼

警告は感違いでした。 ありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

「通常の算術型変換」というやつです。

gyabi
質問者

お礼

比較は違うと考えていました。 ありがとうございます。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

暗黙のうちにaもdoubleにキャストされた上で比較されています。 これはVCだからという話ではなく、C言語自体の仕様です。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec04.html
gyabi
質問者

お礼

演算をするときと同じに考えればよいのですね、理解できました。 ありがとうございました。