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

C言語の整数拡張(Integer Promotion)とは?仕組みをサンプルコードで解説

C言語には、int型よりも少ないバイト数で表現されるデータ型がいくつか存在します。代表的なものとしては、char型やshort型などが挙げられます。

これらの小さなデータ型に対して演算を行うと、自動的にint型へと昇格(プロモート)されます。この動作は「整数拡張(Integer Promotion)」と呼ばれ、C言語の重要な仕様の一つです。

整数拡張のサンプルプログラム

以下は、C言語における整数拡張の動作を確認できるサンプルプログラムです。

#include <stdio.h>
int main() {
    char x = 68;
    char y = 34;
    printf("The value of x is: %d", x);
    printf("\nThe value of y is: %d", y);
    char z = x/y;
    printf("\nThe value of z : %d", z);
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

The value of x is: 68
The value of y is: 34
The value of z : 2

プログラムの解説

それでは、このプログラムの動作を詳しく見ていきましょう。

変数xyは、どちらもchar型として宣言されています。しかし、これらに対して除算(割り算)の演算を行うと、両者は自動的にint型へと昇格されます。その後、計算結果が変数zに格納されます。

このように、小さいデータ型同士の演算時にint型へ自動的に変換される仕組みこそが、整数拡張です。該当するコード部分は以下の通りです。

char x = 68;
char y = 34;
printf("The value of x is: %d", x);
printf("\nThe value of y is: %d", y);
char z = x/y;
printf("\nThe value of z : %d", z);

整数拡張が行われる理由

整数拡張が行われる主な理由は、CPUが一般的にintサイズ(多くの環境で32ビット)の演算を最も効率的に処理できるためです。また、演算途中でのオーバーフローや予期しない結果を防ぎ、一貫した計算結果を保証する役割もあります。

なお、x / yの計算では、68 ÷ 34 = 2.0 となりますが、結果は整数として扱われるため小数点以下は切り捨てられ、zには 2 が格納されます。これはC言語の整数除算の仕様によるものです。

  1. C#でDouble型の値を整数値に変換する方法

    C#でDouble型の値を整数値に変換するには、Convert.ToInt32()メソッドを使用します。Int32は32ビットの符号付き整数を表す型です。まず、変換元となるdouble型の値を用意しましょう。double val = 21.34;続いて、この値をConvert.ToInt32()メソッドを使ってInt32型に変換します。int res = Convert.ToInt32(val);なお、Convert.ToInt32()は小数部分を四捨五入して最も近い整数に丸める点に注意してください。サンプルプログラムusing System; public class Demo { &nbs

  2. Javaで整数を出力するプログラムの書き方|Scannerを使った入力方法も解説

    この記事では、Javaで整数を出力する方法をわかりやすく解説します。整数の取り扱いには「int型」を使用します。int型は32ビットの符号付き2の補数で表現される整数型で、扱える値の範囲は最小値が-2,147,483,648(-2^31)、最大値が2,147,483,647(2^31-1)です。int型は、メモリ使用量に特別な懸念がない限り、整数値のデフォルトのデータ型として広く利用されています。宣言のみの場合の初期値は0です。入力と出力のイメージたとえば、ユーザーが「45」という整数を入力すると、プログラムは次のように出力します。Enter an integer: 45期待される出力:The