- ベストアンサー
int とdoubleの比較
よろしくお願いします。 vc2008でif文の条件として例として以下のように int a = 1; double b = 1.5; if(a < b){} としました。 確か異なる型の比較はまずかったように思うのですが、 このままビルドが通ってしまいました。 特に警告などが出ず、ビルドが通ってしまうのはvc2008が 自動で補正したりしているからなのでしょうか? ご存知の方おりましたら教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 確か異なる型の比較はまずかったように思うのですが (比較演算も含めて)演算の際は、必要かつ可能ならば暗黙の型変換で型を揃えます。 今回はdoubleとintで、doubleに合せるので、特に問題ありません。 問題になるのは unsigned と signed との比較ですね。 (signed int)-1 > (unsigned int)0 が真になる、等、値の型の範囲を越えている場合におかしく見える現象が起ります。
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.3
>確か異なる型の比較はまずかったように思う 勘違いをされてます。
質問者
お礼
警告は感違いでした。 ありがとうございます。
- jacta
- ベストアンサー率26% (845/3158)
回答No.2
「通常の算術型変換」というやつです。
質問者
お礼
比較は違うと考えていました。 ありがとうございます。
- D-Matsu
- ベストアンサー率45% (1080/2394)
回答No.1
暗黙のうちにaもdoubleにキャストされた上で比較されています。 これはVCだからという話ではなく、C言語自体の仕様です。
質問者
お礼
演算をするときと同じに考えればよいのですね、理解できました。 ありがとうございました。
お礼
比較もdoubleにキャストされると思っていませんでした。 今回は問題なく解決しました、ありがとうございました。