C言語の型キャスト(型変換)とは?暗黙的変換と明示的変換をわかりやすく解説
型キャスト(型変換)とは、C言語においてあるデータ型を別のデータ型へ変換する手法のことです。
C言語の型キャストには、大きく分けて「暗黙的な型キャスト」と「明示的な型キャスト」の2種類があります。
1. 暗黙的な型キャスト(Implicit Type Casting)
暗黙的な型キャストは、コンパイラが自動的に行う変換です。1つの式の中で異なるデータ型の変数が混在して使用された場合、データの損失を避けるためにコンパイラが自動的にデータ型を変換します。
以下は、C言語における暗黙的な型キャストの例です。
サンプルコード
#include <stdio.h>
int main() {
int a = 10;
char b = 'S';
float c = 2.88;
a = a+b;
printf("Implicit conversion from character to integer : %d\n",a);
c = c+a;
printf("Implicit conversion from integer to float : %f\n",c);
return 0;
}
実行結果
Implicit conversion from character to integer : 93 Implicit conversion from integer to float : 95.879997
解説: 文字 'S' のASCIIコードは83のため、a = a + b の計算では b が自動的に整数値83へ変換され、10 + 83 = 93 となります。また、c = c + a では整数 a が浮動小数点数に変換され、2.88 + 93 = 95.88 となります(表示上の 95.879997 はfloat型の精度による誤差です)。
2. 明示的な型キャスト(Explicit Type Casting)
明示的な型キャストは、プログラマが意図的に行う変換です。単に「型キャスト」と呼ぶ場合は、こちらの明示的な変換を指すことが一般的です。ユーザーがあるデータ型から別のデータ型へ強制的に変換を行います。
C言語における明示的な型キャストの構文は以下の通りです。
(type) expression
つまり、変換したいデータ型を括弧で囲み、式の前に記述するだけです。
以下は、C言語における明示的な型キャストの例です。
サンプルコード
#include <stdio.h>
int main() {
float c = 5.55;
int s = (int)c+1;
printf("Explicit Conversion : %d\n",s);
return 0;
}
実行結果
Explicit Conversion : 6
解説: (int)c により浮動小数点数 5.55 が整数 5 へ強制的に切り捨てられ、そこに +1 することで結果は 6 となります。
まとめ
| 種類 | 実行主体 | 特徴 |
|---|---|---|
| 暗黙的な型キャスト | コンパイラ | データ損失を避けるため自動的に行われる |
| 明示的な型キャスト | プログラマ | 構文 (type) を用いて強制的に変換する |
-
C#のBufferクラスとは?BlockCopyメソッドでバイト配列をコピーする方法
C#で連続したバイトデータ(バイト列)を扱う際には、Bufferクラスを利用します。Bufferクラスが提供するBuffer.BlockCopyメソッドを使えば、あるバイト配列から別のバイト配列へ、高速かつ安全にバイト単位でデータをコピーすることができます。Buffer.BlockCopyメソッドの基本構文BlockCopyメソッドは以下の引数を受け取ります。src:コピー元のバイト配列srcOffset:コピー元の開始位置(バイト単位)dst:コピー先のバイト配列dstOffset:コピー先の書き込み開始位置(バイト単位)count:コピーするバイト数サンプルコードusing System;
-
C#のEnum.GetNamesメソッドの使い方とサンプルコード
Enum.GetNamesメソッドとはEnum.GetNamesメソッドは、列挙型(enum)に含まれる定数の名前を文字列配列として取得します。戻り値はstring型の配列なので、foreachループなどで処理すれば、列挙型が持つすべての定数名を簡単に表示・活用できます。構文Enum.GetNames(Type)ここでTypeには、対象となる列挙型を指定します。通常はtypeof演算子を使って、列挙型のTypeオブジェクトを渡します。使用例次の例では、Vehicleという列挙型を定義し、Enum.GetNamesメソッドを使ってすべての定数名をコンソールに出力しています。using Syste