e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。
オンライン書籍; インド式プログラミングバイブル C言語入門 (上)
第 1 章 : C言語入門 始めに(書籍のプレビュー)
インド式プログラミングバイブル C言語入門
この記事は、2008年4月から発売の「インド式プログラミングバイブル C言語入門 (上)」より掲載しました。書籍の情報は、こちらをご覧ください。
代入時の型変換
場合によっては、式の型と、代入演算子の左側にある変数の型が一致しないこともあります。このような場合には、式の値が=の左側の変数型に合わせて、自動的に昇格もしくは降格されます。
例えば、次のような代入命令文を見てみましょう。
int i ;
float b ;
i = 3.5 ;
b = 30 ;
ここでの最初の代入文では、式の値がfloat(3.5)になりますが、これはintであるiに格納することができません。このような場合には、floatがintに自動的に降格され、それから値が格納されます。つまり、iに格納される値は、3になります。次の代入文では、これとまったく反対のことが行われます。次の文では、float変数であるbには浮動小数値しか格納できないため、30は30.000000に昇格されてからbに格納されます。
上記の例のような簡単な式だけでなく、複雑な式の場合にも、同様の規則が適用されます。例えば、次のようなプログラムの一部を見てみましょう。
float a, b, c ;
int s ;
s = a * b * c / 100 + 32 / 4 - 3 * 1.1 ;
この例の代入文では、オペランドにintとfloatが混在しています。すでに説明した通り、式の答えを求める過程で、intはfloatに昇格され、その結果はfloatとなります。しかし、このfloat値をsに代入する時には、再度intに昇格降格され、sに格納されます。
図1.7に示される、各算術式の結果を、しっかりと理解してください。ここでは、kが整数値、aが実数値とします。
| 算術命令 |
結 果 |
算術命令 |
結 果 |
|---|---|---|---|
| k = 2 / 9 | 0 | a = 2 / 9 | 0.000000 |
| k = 2.0 / 9 | 0 | a = 2.0 / 9 | 0.222222 |
| k = 2 / 9.0 | 0 | a = 2 / 9.0 | 0.222222 |
| k = 2.0 / 9.0 | 0 | a = 2.0 / 9.0 | 0.222222 |
| k = 9 / 2 | 4 | a = 9 / 2 | 4.000000 |
| k = 9.0 / 2 | 4 | a = 9.0 / 2 | 4.500000 |
| k = 9 / 2.0 | 4 | a = 9 / 2.0 | 4.500000 |
| k = 9.0 / 2.0 | 4 | a = 9.0 / 2.0 | 4.500000 |
| 図 1.7 |
次の式では結果は同じになりますが、その値の0は、異なる過程によって求められることに注意してください。
k = 2 / 9 ;
k = 2.0 / 9 ;
最初の式では、2と9は両方整数であり、結果も整数(この場合0)になります。その0が、その後にkに代入されます。次の式では、9が9.0に昇格され、その後に除算が実行されます。除算の結果は、0.222222となります。しかし、kはintであるため、これをkに格納することはできません。このため、0.222222は0に降格され、その後にkに格納されます。



