C での型キャスト: 型変換、暗黙的、明示的 (例付き)

C の型キャストとは何ですか?

型キャストとは、あるデータ型を別のデータ型に変換することです。C 言語では、データ変換または型変換とも呼ばれます。これは、「C」プログラミングで導入された重要な概念の 1 つです。

「C」プログラミングでは、2 種類の型キャスト操作が提供されます。

  1. 暗黙的な型キャスト
  2. 明示的な型キャスト

暗黙的な型キャスト

暗黙的な型キャストとは、元の意味を失わずにデータ型を変換することを意味します。 このタイプの型キャストは、データ型を変更する場合に不可欠です。 無し 内部に格納されている値の重要性を変更する 変数.

C の暗黙的な型変換は、値が互換性のあるデータ型にコピーされるときに自動的に行われます。変換中は、型変換の厳密なルールが適用されます。オペランドが 2 つの異なるデータ型である場合、より低いデータ型のオペランドは、より高いデータ型に自動的に変換されます。このタイプの型変換は、次の例で確認できます。

#include<stdio.h>
int main(){
	short a=10; //initializing variable of short data type
	int b; //declaring int variable
	b=a; //implicit type casting
	printf("%d\n",a);
	printf("%d\n",b);
}

出力:

10
10

暗黙的な型キャスト

  1. 指定された例では、値が 10 に初期化された short データ型の変数を宣言しました。
  2. XNUMX 行目では、int データ型の変数を宣言しています。
  3. XNUMX 行目では、変数 s の値を変数 a に代入しています。 XNUMX 行目では、short データ型の変数 s の値が int データ型の変数 a にコピーされるため、暗黙的な型変換が実行されます。

文字を Int に変換する

ASCII でデコードされた文字を整数で追加する例を考えてみましょう。

#include <stdio.h>
main() {
   int  number = 1;
   char character = 'k'; /*ASCII value is 107 */
   int sum;
   sum = number + character;
   printf("Value of sum : %d\n", sum );
}

出力:

 Value of sum : 108

ここで、コンパイラは実際の加算演算を実行する前に 'k' の値を ASCII に変換することによって整数昇格を実行しました。

算術変換階層

コンパイラはまず文字を整数に昇格します。オペランドのデータ型がまだ異なる場合は、次の階層図に表示されている最も高いデータ型に変換されます。

暗黙的な型キャスト
算術変換階層

概念を理解するために次の例を考えてみましょう。

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

出力:

 sum = 120.000000

まず、c 変数は整数に変換されますが、コンパイラは NUM c を「float」に変換し、それらを追加して「float」結果を生成します。

暗黙的な変換に関する重要なポイント

  • 型変換の暗黙的な型は、標準型変換とも呼ばれます。 暗黙的な型キャストではキーワードや特別なステートメントは必要ありません。
  • 小さいデータ型から大きいデータ型への変換は、次のように呼ばれます。 タイププロモーション上記の例では、s の値が整数型に昇格されているとも言えます。
  • 暗黙的な型変換は、常に互換性のあるデータ型で行われます。

次のような相互に互換性のないデータ型に対して暗黙的な型キャストを実行することはできません。

  1. float を int に変換すると、小数部分が切り捨てられるため、値の意味が失われます。
  2. double を float に変換すると、桁が切り上げられます。
  3. long int を int に変換すると、余分な上位ビットが削除されます。

上記のすべてのケースで、データ型を変換すると、値の意味が失われます。 一般に、値の意味が失われるとコンパイラによって警告されます。

「C」プログラミング は、明示的な型キャストという別の型キャスト方法を提供します。

明示的な型キャスト

暗黙的な型変換では、データ型は自動的に変換されます。強制的に型変換を行う必要があるシナリオがいくつかあります。int データ型として宣言された 2 つのオペランドの除算を格納する変数 div があるとします。

 int result, var1=10, var2=3;
result=var1/var2;

この場合、変数 var1 と var2 で除算が実行された後、変数「result」に格納される結果は整数形式になります。これが発生すると、変数「result」に格納される値は、XNUMX つの数値の除算で通常得られる小数部を考慮しないため、意味を失います。

このような状況で型変換を強制するには、明示的な型キャストを使用します。

型キャスト演算子が必要です。型キャスト操作の一般的な構文は次のとおりです。

(type-name) expression

ここでは、

  • 型名は、標準の「C」言語データ型です。
  • 式には、定数、変数、または実際の式を指定できます。

明示的な型キャストを使用して C で型キャストする方法を示すプログラムを作成してみましょう。

#include<stdio.h>
int main()
{
	float a = 1.2;
	//int b  = a; //Compiler will throw an error for this
	int b = (int)a + 1;
	printf("Value of a is %f\n", a);
	printf("Value of b is %d\n",b);
	return 0;
}

出力:

Value of a is 1.200000
Value of b is 2

明示的な型キャスト

  1. float 型の変数 'a' を初期化しました。
  2. 次に、整数データ型の別の変数 'b' があります。 変数 'a' と 'b' は異なるデータ型であるため、'C' ではそのような式の使用が許可されず、エラーが発生します。 「C」の一部のバージョンでは、式は評価されますが、結果は望ましくないものになります。
  3. このような状況を回避するために、float 型の変数 'a' を型キャストしました。 明示的な型キャストメソッドを使用することで、float を integer データ型に変換することに成功しました。
  4. 'a' の値を出力しましたが、これはまだ浮動小数点です。
  5. 型キャスト後の結果は常に整数「b」になります。

このようにして、C プログラミングで明示的な型キャストを実装できます。

まとめ

  • 型キャストは型変換とも呼ばれます
  • これは、あるデータ型を別のデータ型に変換することを意味します。
  • 小さいデータ型を大きいデータ型に変換することを、型の昇格とも呼ばれます。
  • 型変換には、C における暗黙的型変換と明示的型変換の XNUMX 種類があります。
  • 互換性のあるデータ型が見つかった場合、暗黙的な型変換が自動的に実行されます。
  • 明示的な型変換には型キャスト演算子が必要です。

データの損失を防ぐために、異なるデータ型を扱うときは、プログラミングの実践において次のルールに留意してください。

  • 整数型は浮動小数点型に変換する必要があります。
  • float 型は double 型に変換する必要があります。
  • 文字型は整数に変換する必要があります。