ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

Cの「int / int = int」な仕様

C言語でも、C#でも通用する話なんですが、

除算するときは「3 / 2」などと書きますよね。

リテラルとリテラルの演算なんて、まず、やりませんが
まぁ見ていてください。

この「3 / 2」の結果は1になってしまうんです。

1というのは1.5をint型に変換したためです。

要するに「整数型 / 整数型」の結果は整数型になってしまうと言うことです。


これを回避するにはオペランドのリテラルを実数型にすれば良いのです。

片方だけでも構いません。
オペランドが実数型なら結果も実数型になります。

つまり、「3d / 2d」と書けば1.5になってくれます。


しかし、これは不便ですよね。

常識的に考えて「3 / 2」は1.5じゃないですか。

オペランドがリテラルなら、型文字でなんとかなるかも知れないですけど、
一般的にオペランドは変数です。

そのため、オペランドをintで格納していたら「int / int」で、
結果は整数型になってしまうんですよ。

いちいちキャストしないといけません。

(double) int / (double) int」みたいに。


オペランドがintでも、結果はdoubleにするほうが良いと思います。
普通そうするべきです。

そしたら、結果をintで取りたいときに困るという人がでるかも知れませんが、
そういうケースは少ないのでintにキャストしてください。


ところで、VBの除算記号には、
結果をdoubleで返す/記号と、結果をintで返す\記号があります。

この仕様が一番やりやすいです。

たまにCがVBに負けていることがあるんですよね。

tag:

コメント

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/235-74ad4e13
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。