C での型キャスト: 型変換、暗黙的、明示的 (例付き)
C の型キャストとは何ですか?
型キャストとは、あるデータ型を別のデータ型に変換することです。C 言語では、データ変換または型変換とも呼ばれます。これは、「C」プログラミングで導入された重要な概念の 1 つです。
「C」プログラミングでは、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
- 指定された例では、値が 10 に初期化された short データ型の変数を宣言しました。
- XNUMX 行目では、int データ型の変数を宣言しています。
- 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 の値が整数型に昇格されているとも言えます。
- 暗黙的な型変換は、常に互換性のあるデータ型で行われます。
次のような相互に互換性のないデータ型に対して暗黙的な型キャストを実行することはできません。
- float を int に変換すると、小数部分が切り捨てられるため、値の意味が失われます。
- double を float に変換すると、桁が切り上げられます。
- 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
- float 型の変数 'a' を初期化しました。
- 次に、整数データ型の別の変数 'b' があります。 変数 'a' と 'b' は異なるデータ型であるため、'C' ではそのような式の使用が許可されず、エラーが発生します。 「C」の一部のバージョンでは、式は評価されますが、結果は望ましくないものになります。
- このような状況を回避するために、float 型の変数 'a' を型キャストしました。 明示的な型キャストメソッドを使用することで、float を integer データ型に変換することに成功しました。
- 'a' の値を出力しましたが、これはまだ浮動小数点です。
- 型キャスト後の結果は常に整数「b」になります。
このようにして、C プログラミングで明示的な型キャストを実装できます。
まとめ
- 型キャストは型変換とも呼ばれます
- これは、あるデータ型を別のデータ型に変換することを意味します。
- 小さいデータ型を大きいデータ型に変換することを、型の昇格とも呼ばれます。
- 型変換には、C における暗黙的型変換と明示的型変換の XNUMX 種類があります。
- 互換性のあるデータ型が見つかった場合、暗黙的な型変換が自動的に実行されます。
- 明示的な型変換には型キャスト演算子が必要です。
データの損失を防ぐために、異なるデータ型を扱うときは、プログラミングの実践において次のルールに留意してください。
- 整数型は浮動小数点型に変換する必要があります。
- float 型は double 型に変換する必要があります。
- 文字型は整数に変換する必要があります。