0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語初学者のメモ#4-型変換

Posted at

「プログラミング言語C第2版」(B.W.カーニハン/D.Mリッチー著)を参考にしています。

自動的に行われる型変換

自動的に行われる型変換は、「より狭い」被演算子から「より広い」被演算子に変換するものだけである。

暗黙の算術変換

一般的に、二項演算子に異なる型の被演算数が現れると、低い型が高い型に格上げされてから演算が実行され、その結果も高い型になる。

  • まず、いずれかの被演算数がlong doubleなら、他方もlong doubleに変換される

  • そうでなくて、片方の被演算数がdoubleなら、他方もdoubleに変換される

  • そうでなくて、片方の被演算数がfloatなら、他方もfloatに変換される

  • そうでない時は、両方の被演算数に対して整数への格上げが行われる

    • 片方の被演算数がunsigned long intなら、他方もunsigned long intに変換される
    • そうでなくて、片方の被演算数がlong intで、他方がunsigned intである時には、long intunsigned intの全ての値を表現できるかに左右される
      • 可能な時:unsigned intの被演算数がlong intに変換される
      • 不可能な時:両方がunsigned long intに変換される
    • そうでなくて、片方の被演算数がlong intの時には、他方もlong intに変換される
    • そうでなくて、片方の被演算数がunsigned intであれば、他方もunsigned intに変換される
    • そうでない時には、両方の被演算数はint型である

注意点として、式の中のfloatは自動的にdoubleに変換されることはない、という点が挙げられる。メモリの都合上このようになっているらしい。

代入時の変換

代入において、右辺の値が左辺の型に変換され、それが結果の型となる。つまり、長い整数がcharや短い整数に代入される際には、余分な上位ビットは捨てられることになる。
他にも、floatからintへの変換は小数部分が切り捨てられる。また、double->floatは値が丸められるか切り捨てられるかは処理系に依存する。

明示的な型変換(cast)

以下の構文で強制変換をすることができる。

(type-name) expression

以下に例を示す。

cast.c
sqrt((double)n)

これは関数sqrt()に引数nを渡す前に、doubleに変換される例である。この時、n自身の型は変化しない。
なお、事前に関数のプロトタイプdouble sqrt(double)が与えられている場合は、キャストを用いずとも自動的に型変換が行われる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?