Saturday, September 1, 2018

C 型キャスティング

型キャストは、変数をあるデータ型から別のデータ型に変換する方法です。 たとえば、 'long'値を単純な整数に格納する場合は、 'int'にキャスト 'long'と入力できます。 次のように、キャスト演算子を使用して値をあるタイプから別のタイプに明示的に変換できます
(type_name) expression

以下の例では、キャスト演算子を使用して、別の整数変数の除算を浮動小数点演算として実行する例を示します
#include <stdio.h>

main() {

   int sum = 17, count = 5;
   double mean;

   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
}
上記のコードをコンパイルして実行すると、次の結果が生成されます
Value of mean : 3.400000

ここで、キャスト演算子は除算より優先されるので、sumの値は最初に double 型に変換され、最後に count で除算されて double 値を生成します。

コンパイラによって自動的に実行される型変換は暗黙的に行うことも、キャスト演算子を使用して明示的に指定することもできます。 型変換が必要なときは常に、キャスト演算子を使用するのが良いプログラミング方法と考えられます。


整数昇進
整数昇格は int 型または unsigned int より小さい整数型の値を int または unsigned int に変換するプロセスです。 整数を含む文字を追加する例を考えてみましょう
#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   int sum;

   sum = i + c;
   printf("Value of sum : %d\n", sum );
}
上記のコードをコンパイルして実行すると、次の結果が生成されます

Value of sum : 116
ここで、実際の加算演算を実行する前に、コンパイラが整数昇格を行い、 'c'の値をASCIIに変換しているため、sumの値は116です。


通常の算術変換
通常の算術変換は、その値を共通の型にキャストするために暗黙的に実行されます。 コンパイラはまず整数昇格を実行します。 オペランドにまだ異なる型がある場合、それらは、次の階層で最も高い型に変換されます

Usual Arithmetic Conversion

通常の算術変換は、代入演算子や論理演算子 && および  ||  に対しては実行されません。 概念を理解するために、次の例を考えてみましょう。

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   float sum;

   sum = i + c;
   printf("Value of sum : %f\n", sum );
}
上記のコードをコンパイルして実行すると、次の結果が生成されます

Value of sum : 116.000000

ここでは、最初のcが整数に変換されるのは簡単ですが、最終的な値がdoubleであるため、通常の算術変換が適用され、コンパイラはiとcを 'float'に変換して 'float'






No comments:

Post a Comment

Interfaces and their protocol stacks

インタフェースとそのプロトコルスタック 主要なネットワーク要素に精通した後、これら要素間のインタフェースをよりよく知る時期が来ています。 インタフェースは、MME、SGWおよびPGWが他のネットワーク要素(例えば、HSSまたはPCRF)と協働することを可能にする。 それらの...