C言語の型変換入門:暗黙的変換と明示的変換(キャスト)の違いを徹底解説
あるデータ型を別のデータ型へ変換することを「型変換(type conversion)」と呼びます。C言語における型変換には、主に以下の2種類があります。
- 暗黙的な型変換(implicit conversion)
- 明示的な型変換(explicit conversion)
暗黙的な型変換とは
演算対象(オペランド)同士のデータ型が異なる場合、コンパイラが自動的に行う型変換です。
プログラマが特に指示しなくても、小さいデータ型から大きいデータ型への変換が自動的に実行されます。これを「型の昇格」とも呼びます。
int i,x; float f; double d; long int l;

上記のように複数のデータ型が混在する式では、最終的にすべての値が最も大きいデータ型である「double」として評価されます。
暗黙的な型変換のサンプルコード
以下は、暗黙的な型変換の例です。
int x;
for(x=97; x<=122; x++){
printf("%c", x); /* int から char への暗黙的なキャスト */
}
%c 指定子を使用することで、int 型の値 x が自動的に char 型として扱われ、アルファベットの a〜z が出力されます。
明示的な型変換とは
プログラマが「(型名)」というキャスト演算子を使って、意図的に行う型変換です。
変換を実行する前に、代入先の型が元の値を正しく保持できるかどうかが確認されます。
int a,c; float b; c = (int) a + b
この例では、「a + b」の計算結果が明示的に int 型へ変換された後、変数 c に代入されます。
明示的な型変換のサンプルコード
以下は、明示的な型変換の例です。
int x;
for(x=97; x<=122; x++){
printf("%c", (char)x); /* int から char への明示的なキャスト */
}
次に、2つの型変換の違いを実際のコードと実行結果で確認してみましょう。
サンプルコード(暗黙的な型変換)
#include<stdio.h>
main(){
int i=40;
float a;
//暗黙的な型変換
a=i;
printf("implicit value:%f\n",a);
}
実行結果
Implicit value:40.000000
int 型の値 40 を float 型の変数 a にそのまま代入すると、コンパイラが自動的に int から float へ変換するため、「40.000000」と小数点以下を含む形式で出力されます。
サンプルコード(明示的な型変換)
#include<stdio.h>
main(){
int i=40;
short a;
//明示的な型変換
a=(short)i;
printf("explicit value:%d\n",a);
}
実行結果
Explicit value:40
(short) というキャスト演算子を記述することで、int 型の値を short 型へ明示的に変換しています。暗黙的な変換はコンパイラに任せる方法である一方、明示的な変換はプログラマが意図を明確にして型変換を制御できる点が大きな違いです。状況に応じて適切な方法を選択することが、安全で可読性の高いC言語プログラミングにつながります。
-
C言語の演算子と式の種類を徹底解説!算術からビット演算まで
C言語における演算子(オペレーター)とは、データに対して何らかの操作を行うための記号です。C言語の演算子は、その機能によって以下のように分類されます。算術演算子関係演算子論理演算子代入演算子インクリメント・デクリメント演算子ビット演算子条件演算子特殊演算子それぞれの演算子について、具体例とサンプルプログラムを交えながら詳しく見ていきましょう。1. 算術演算子算術演算子は、足し算や引き算などの数値計算を行うために使われます。演算子説明例a=20, b=10 の場合結果+加算(足し算)a+b20+1030-減算(引き算)a-b20-1010*乗算(掛け算)a*b20*10200/除算(割り算)a/
-
C言語の基本データ型を徹底解説!int・char・floatの種類とサイズ一覧
C言語の基本データ型とは? C言語のコンパイラがサポートする基本データ型は、大きく分けて次の4つです。 整数型(Integer) 文字型(Character) 浮動小数点型(Floating-point) 倍精度浮動小数点型(Double precision floating point) プログラムで扱う値の種類(整数・文字・実数など)に応じて適切な型を選ぶことは、正確で効率的なコードを書くための第一歩です。なお、各データ型のサイズや表現できる値の範囲は、使用するコンパイラや実行環境によって異なる場合がある点に注意してください。 整数型(Integral Data Type) 整数型は