C++
 Computer >> コンピューター >  >> プログラミング >> C++

C/C++の型キャストとは?基礎から整数昇格・通常の算術型変換まで解説

型キャスト(型変換)とは、あるデータ型の変数を別のデータ型へ変換する手法のことです。例えば、long型の値を単純なint型の変数に格納したい場合、longintへキャストすることができます。

値をある型から別の型へ明示的に変換するには、キャスト演算子を次の形式で使用します。

(型名) 式

キャスト演算子の使用例

次の例では、キャスト演算子によって整数変数同士の除算が浮動小数点演算として実行されます。

#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型の値(3.400000)となります。

型変換には、コンパイラが自動的に行う「暗黙的変換」と、キャスト演算子を使って明示的に指定する「明示的変換」の2種類があります。プログラミングのベストプラクティスとしては、型変換が必要な場面では常にキャスト演算子を明示的に使用することが推奨されています。

整数の昇格(Integer Promotion)

整数の昇格とは、intunsigned intよりも「小さい」整数型の値が、int型またはunsigned int型に自動的に変換されるプロセスのことです。次に、文字と整数を加算する例を見てみましょう。

#include <stdio.h>
main() {
    int i = 17;
    char c = 'c'; /* ASCII値は99 */
    int sum;
    sum = i + c;
    printf("Value of sum : %d\n", sum );
}

このコードをコンパイルして実行すると、以下の結果が出力されます。

Value of sum : 116

ここでsumの値が116になるのは、コンパイラが整数の昇格を行い、実際の加算処理を実行する前に文字'c'の値をASCIIコード(99)に変換しているためです。17 + 99 = 116 という計算が行われています。

通常の算術型変換(Usual Arithmetic Conversion)

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

  • long double
  • double
  • float
  • unsigned long long / unsigned long
  • long long / long
  • unsigned int
  • int

なお、通常の算術型変換は、代入演算子や論理演算子(&&および||)に対しては実行されません。以下の例でこの概念を確認してみましょう。

使用例

#include <stdio.h>
main() {
    int i = 17;
    char c = 'c'; /* ASCII値は99 */
    float sum;
    sum = i + c;
    printf("Value of sum : %f\n", sum );
}

出力結果

Value of sum : 116.000000

この例では、まず文字cが整数に変換されるのは簡単に理解できます。しかし、最終的な値がfloat型であるため、通常の算術型変換が適用され、コンパイラはicfloat型に変換してから加算を行い、float型の結果(116.000000)を生成します。

まとめ

C/C++における型キャストは、プログラムの正確性と意図した動作を保証するために非常に重要な概念です。明示的なキャスト演算子の活用、整数の昇格の仕組み、通常の算術型変換のルールを正しく理解することで、予期しない型変換によるバグを防ぎ、より安全で信頼性の高いコードを書くことができます。

  1. Windowsで使えるC++開発向けおすすめIDE 7選

    ```html 大規模なプロジェクトをプレーンなテキストエディターだけで管理するのは困難です。こうしたケースではIDE(統合開発環境)を使った方が、生産性が向上しストレスも大幅に軽減されます。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。ここでは、Windowsで利用できる優れたC/C++向けIDEをご紹介します。 1. Visual Studio Microsoftが開発した定番IDEです。Windows上でのC++プログラムの構築・開発・プロファイリングにおいて、最高クラスのツール群を備えています。豊富なプラグインストアも魅力で、Azure、PowerShe

  2. C#のボクシング(ボックス化)とは?仕組みとサンプルコードでわかりやすく解説

    C#のボクシング(ボックス化)とは ボクシング(ボックス化)とは、値型(int や double など)を object 型(オブジェクト型)に変換する操作のことです。C#では、値型の変数を object 型の変数に代入するだけで、自動的にボクシングが行われます。 以下はボクシングの基本的な例です。 int x = 50; object ob = x; // ここでボクシングが発生 ボクシングの仕組み:スタックとヒープ ボクシングが行われると、スタックに格納されていた値がコピーされ、ヒープメモリ上のオブジェクトとして格納されます。そのため、元の値型変数と object 型変数は、それぞれ独立し