透2017/6/262019/5/22型のキャストって使ってますか?ある型の変数を別の型に変換したいときに使います。C言語では型の変換は記述なしで暗黙的に行ってくれる場合もありますが、明示的に記述して行う場合もあります。記述して明示的に型の変換を行うことをキャストといいます。この記事では、型のキャストについて型変換とは暗黙的型変換について明示的型変換についてポインタ型へのキャストについてキャストの注意点についてなど基本的な内容から、詳しい内容についても解説していきます。まとめ型変換とは型変換とは、変数やオブジェクトを宣言時に定義にした型とは別の型に変えることを言います。型の変換には明確に記述しなくても行われる暗黙的型変換と記述して行う明示的型変換とがあります。明示的型変換のことを特にキャストと言います。暗黙的型変換について暗黙的型変換は明確に記述しなくても、代入や式中で行われます。代入の際に「=」記号の左辺の型と右辺の型が違う場合、左辺の型に変換されます。式中での変換は、式中で違う型の変数や定数が記述されている場合、基本的には型の精度の高い方に変換されます。優先される順序は下記のとおりです。char型それではサンプルコードで確認していきましょう。6.000000このサンプルコードでは、まずdouble型の変数「dbl」にint型の変数「num」を代入し、暗黙的型変換を行っています。int型の変数「num」はdouble型に変換されています。double型の変数「result」を算出するための式中で、double型の変数「dbl」とint型の変数「num」を足し合わせる際に暗黙的変換を行っています。int型の変数「num」はdouble型に変換されています。明示的型変換(キャスト)について記述して型の変換を行うことをキャストといいます。キャストは以下のように記述します。(型名)式int型とdouble型の型変換たとえばint型の変数を分母として割り算を行う場合は、浮動小数点数型への暗黙的型変換は行われず意図しない値が算出されるのでキャストを行う必要があります。サンプルコードで確認していきましょう。0;}このサンプルコードではint型の変数「num」を分母で割り算を行っています。int型の変数をdouble型にキャストした場合は意図どおりの結果となり、キャストしない場合は意図と違う結果となっています。int型とchar型の型変換char型の変数は文字を格納することができますが、-128から127までの値も格納します。char型の変数は0から255までの値を格納します。char型の文字をint型に変換すると、それぞれの文字に割り当てられた文字コードと呼ばれる0以上の数値として扱うことができます。ちなみに、文字コードはSJISやUTF-8などコードを記述するファイルの形式によって異なります。int型をchar型に変換すると文字として扱うことができます。char型に変換するようにしましょう。char型にキャストすると意図しない値となるので、ご注意ください。それではサンプルコードで確認しましょう。char型変数uchrの値はaこのサンプルコードでは、まずchar型の変数chrをint型にキャストしています。次にint型の変数numをchar型にキャストしています。このサンプルコードはUTF-8形式でコードを記述しています。UTF-8の場合は、数値の0から127まで文字が割り当てられていますので、int型の数値をchar型に変換する場合は数値の範囲に注意しましょう。ちなみにSJISなどの場合のように、文字コードによっては255まで文字が割り当てられていることもあります。※[補足]char型の整数は、多くの環境で「-128〜127」を扱えるとして知られています。環境によっては、unsignedをつけなくとも、符号なし整数変数(0〜255)として扱われる場合もありますので注意しましょう。ポインタ型へのキャストについてポインタ型へキャストすることもできます。ポインタ型へのキャストは以下のように記述します。(型名*)式それではサンプルコードで確認していきましょう。Helloこのサンプルコードではchar型の配列「str」をchar型のポインタ「ptr」にキャストして「ptr」のアドレス先の値を表示しています。キャストの注意点についてキャストを行う際に気を付けなければならない注意点がいくつかあります。確認していきましょう。小数点以下の切り捨てについてdouble型などの浮動小数点数型からint型などの整数へキャストする場合は小数点以下が切り捨てられますので、注意が必要です。サンプルコードで確認していきましょう。3このサンプルコードではdoouble型の変数「dbl」をint型変数「num」にキャストしています。int型変数「num」の値は「3」と小数点以下が切り捨てられています。符号ありと符号なしの変換についてマイナスの値の変数を符号なし型の変数にキャストしてもマイナスを取った値にはなりません。意図しない値となるので注意しましょう。サンプルコードで確認していきましょう。156このサンプルコードでは符号付きchar型の変数「chr」を符号なしchar型「uchr」にキャストしています。「uchr」の値は「chr」の値のマイナスを取った値ではなく、意図しない値となっています。オーバーフロー(桁あふれ)について型の範囲外の値を代入して意図しない値になることをオーバーフロー(桁あふれ)といいます。範囲の大きい型から小さい型へキャストする場合はこのオーバーフローが起こる可能性があるので、注意が必要です。サンプルコードで確認していきましょう。-24このサンプルコードではint型の変数「num」をchar型の変数「chr」にキャストしています。「num」の値は「1000」とchar型の値の範囲-128~127外の値からキャストしていますので、「chr」の値は意図しない値になっています。まとめここでは、型のキャストについて説明しました。キャストする際には、小数点以下切り捨て、符号付きから符号なしへの変換、オーバーフローなどで意図しない値にならないように注意しましょう。使いこなすことができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。