【C言語入門】型のキャストまとめ(intからdouble、charへの型変換)

型のキャストって使ってますか?ある型の変数を別の型に変換したいときに使います。

C言語では型の変換は記述なしで暗黙的に行ってくれる場合もありますが、明示的に記述して行う場合もあります。記述して明示的に型の変換を行うことをキャストといいます。

この記事では、型のキャストについて

  • 型変換とは
  • 暗黙的型変換について
  • 明示的型変換について
  • ポインタ型へのキャストについて
  • キャストの注意点について

など基本的な内容から、詳しい内容についても解説していきます。今回は型のキャストについて、使い方をわかりやすく解説します!

型変換とは

型変換とは、変数やオブジェクトを宣言時に定義にした型とは別の型に変えることを言います。型の変換には明確に記述しなくても行われる暗黙的型変換と記述して行う明示的型変換とがあります。

明示的型変換のことを特にキャストと言います。

暗黙的型変換について

暗黙的型変換は明確に記述しなくても、代入や式中で行われます。代入の際に「=」記号の左辺の型と右辺の型が違う場合、左辺の型に変換されます。

また、式中での変換は、式中で違う型の変数や定数が記述されている場合、基本的には型の精度の高い方に変換されます。優先される順序は下記のとおりです。

double型 > float型 > long (int)型 > int型 > short (int)型 > char型

それではサンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、まずdouble型の変数「dbl」にint型の変数「num」を代入し、暗黙的型変換を行っています。int型の変数「num」はdouble型に変換されています。

また、double型の変数「result」を算出するための式中で、double型の変数「dbl」とint型の変数「num」を足し合わせる際に暗黙的変換を行っています。

int型の変数「num」はdouble型に変換されています。

明示的型変換(キャスト)について

記述して型の変換を行うことをキャストといいます。キャストは以下のように記述します。

int型とdouble型の型変換

たとえばint型の変数を分母として割り算を行う場合は、浮動小数点数型への暗黙的型変換は行われず意図しない値が算出されるのでキャストを行う必要があります。

サンプルコードで確認していきましょう。

このサンプルコードではint型の変数「num」を分母で割り算を行っています。int型の変数をdouble型にキャストした場合は意図どおりの結果となり、キャストしない場合は意図と違う結果となっています。

int型とchar型の型変換

char型の変数は文字を格納することができますが、-128から127までの値も格納します。

また、unsigned char型の変数は0から255までの値を格納します。char型の文字をint型に変換すると、それぞれの文字に割り当てられた文字コードと呼ばれる0以上の数値として扱うことができます。

ちなみに、文字コードはSJISやUTF-8などコードを記述するファイルの形式によって異なります。また、int型をchar型に変換すると文字として扱うことができます。

ただしchar型に変換する場合は、文字に割り当てられた文字コードが0以上の値ですので、値の範囲が0から255までの数値をunsigned char型に変換するようにしましょう。

範囲外の数値をunsigned char型にキャストすると意図しない値となるので、ご注意ください。

それではサンプルコードで確認しましょう。

実行結果:

このサンプルコードでは、まずchar型の変数chrをint型にキャストしています。

次にint型の変数numをchar型にキャストしています。なお、このサンプルコードはUTF-8形式でコードを記述しています。

UTF-8の場合は、数値の0から127まで文字が割り当てられていますので、int型の数値をchar型に変換する場合は数値の範囲に注意しましょう。

ちなみにSJISなどの場合のように、文字コードによっては255まで文字が割り当てられていることもあります。

※[補足]char型の整数は、多くの環境で「-128〜127」を扱えるとして知られています。ただし環境によっては、unsignedをつけなくとも、符号なし整数変数(0〜255)として扱われる場合もありますので注意しましょう。

ポインタ型へのキャストについて

ポインタ型へキャストすることもできます。ポインタ型へのキャストは以下のように記述します。

それではサンプルコードで確認していきましょう。

実行結果:

このサンプルコードではchar型の配列「str」をchar型のポインタ「ptr」にキャストして「ptr」のアドレス先の値を表示しています。

キャストの注意点について

キャストを行う際に気を付けなければならない注意点がいくつかあります。確認していきましょう。

小数点以下の切り捨てについて

double型などの浮動小数点数型からint型などの整数へキャストする場合は小数点以下が切り捨てられますので、注意が必要です。サンプルコードで確認していきましょう。

実行結果:

このサンプルコードではdoouble型の変数「dbl」をint型変数「num」にキャストしています。int型変数「num」の値は「3」と小数点以下が切り捨てられています。

符号ありと符号なしの変換について

マイナスの値の変数を符号なし型の変数にキャストしてもマイナスを取った値にはなりません。意図しない値となるので注意しましょう。

サンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは符号付きchar型の変数「chr」を符号なしchar型「uchr」にキャストしています。

「uchr」の値は「chr」の値のマイナスを取った値ではなく、意図しない値となっています。

オーバーフロー(桁あふれ)について

型の範囲外の値を代入して意図しない値になることをオーバーフロー(桁あふれ)といいます。範囲の大きい型から小さい型へキャストする場合はこのオーバーフローが起こる可能性があるので、注意が必要です。

サンプルコードで確認していきましょう。

実行結果:

このサンプルコードではint型の変数「num」をchar型の変数「chr」にキャストしています。

「num」の値は「1000」とchar型の値の範囲-128~127外の値からキャストしていますので、「chr」の値は意図しない値になっています。

まとめ

ここでは、型のキャストについて説明しました。

キャストする際には、小数点以下切り捨て、符号付きから符号なしへの変換、オーバーフローなどで意図しない値にならないように注意しましょう。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説