目次
int型とは?
int型とは、C言語やJavaなどのコンピュータプログラミング言語で用いられるデータ型のひとつです。int型変数には、整数値を入れることができます。
ただし、一口に「int型」と言ってもプログラミング言語やコンパイラ等の違いにより、変数に格納できる数値の範囲は異なります。
以降、C言語での例を挙げて説明して行きますので、参考にして下さい。
int型変数
変数とは、簡単に言うと「計算すべき値や計算した結果を入れておく箱」のようなものです。
その中でも「int型変数」は、比較的小さな整数値を入れておくことができる箱と言えます。
また、C言語の場合、int型変数にも格納できる数値の大きさによっていくつか種類がありますので、以下でそれぞれについて見ていきます。
int型
大抵のCコンパイラでは、32ビット(4バイト)で表現できる整数値を入れることができます。
ただし、16ビット以下のCPU用コンパイラである場合には、16ビット(2バイト)以下の数値しか入れられないものもあります。
そのため、他の環境へ移植する可能性のあるプログラムを作成する際にint型変数を使用する場合は、注意が必要です。
short int型
16ビット(2バイト)で表現できる整数値を入れることができます。表現できる数値範囲は「-32,768~32,767」です。short int型は単にshortと省略することもできます。
最近の高性能CPUは32ビット以上であることが多いので、通常はlong型(「long int型」の項を参照して下さい)を使用した方が効率は良いでしょう。short型を使用する機会というのは9~16ビットのデータをたくさん保存するようなときでしょう。
long int型
32ビット(4バイト)で表現できる整数値を入れることができます。表現できる数値範囲は、「-2147483648~2147483647」です。このlong int型は、単にlongと省略することもできます。
32ビット以上の高性能CPU上で走るプログラムを作成するときには、このlong型(またはint型)を利用することが多いでしょう。
符号なし整数(unsigned)
プログラミングをして行く中で、符号が不要で、その代わりにもう少し大きな値まで使いたいということがあります。
その時に使用するのが「符号なし整数」です。符号なし整数には、以下の例のように「型」の前にunsignedを付けます。
1
2
3
|
unsigned int型:0~4294967295
unsigned short int型:0~65535
unsigned long int型:0~4294967295
|
符号あり整数型と符号なし整数型の違い
符号なし整数型が全ビットをすべて数値とみなすのに対し、符号あり整数型は最上位ビットを符号ビットとみなします。
そのため符号あり整数型は、符号なし整数型に対して表現できる最大値が約半分になります。
その他の型
C言語には、int型以外にも文字や文字列を扱うためのchar型、実数値(浮動小数点数)を扱うためのfloat型やdouble型、型なしを表すvoid型などがあります。
char型は8ビット(1バイト)の整数型です。扱える数値範囲は「-128~127」です。整数型ですのでunsignedを付けて符号なし整数型にすれば「0~255」の数値を扱うことができます。
この型は、文字コードを扱うときによく使用しますが、他の8ビットデータを扱うときにも用いられます。
次のfloat型、double型は実数値を扱う型で天文学的に大きな数値を扱うことができます。float型は32ビット(4バイト)で表現され、double型は64ビット(8バイト)で表現されます。
最後のvoid型は、「型なし」を表す型です。型がないので0ビット(0バイト)となり、変数としては使えません。
整数型(int型)の使い方
C言語でプログラミングをする際、整数型(int型)変数はよく使用されます。理由は整数型の方が扱いは簡単で、処理も軽くなるからです。
現在のパソコンなどに使用されているような高性能CPUは、実数型を扱うための命令セットを持っていますが、安価なCPUの場合、実数型を扱う命令セットがなくプログラムで処理していました。
そのため処理速度が遅く、整数型で置き換えが可能な処理は実数型を使わずに整数型を使用していたという歴史があります。
整数型(int型)の使い方としては、実数型を使用しないとプログラミング出来ないような用途以外は、基本的に整数型を使用すると覚えておきましょう。
int型とdouble型の処理速度の違い
int型変数とdouble型変数の処理速度の違いを確認できるサンプルプログラムをご紹介します。
以下のサンプルプログラムは、WindowsのVisual Studio 2017と、MinGWのGCCで動作確認済みです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h>
#include <time.h>
void main()
{
clock_t start, end;
int i, iCount;
double d, dCount;
start = clock();
iCount = 0;
for( i = 0; i < 10000000; i++ ) {
iCount++;
}
end = clock();
printf( "整数型実行時間 = %f(秒), iCount = %d\n",
(double)(end - start) / CLOCKS_PER_SEC, iCount );
start = clock();
dCount = 0.;
for( d = 0.; d < 10000000.; d++ ) {
dCount++;
}
end = clock();
printf( "実数型実行時間 = %f(秒), dCount = %f\n",
(double)(end - start) / CLOCKS_PER_SEC, dCount );
}
|
上記のコードをMinGWのGCCでコンパイルし、実行した結果(参考)は次の通りでした。
(実行結果はコンパイラやコンパイル時のオプションスイッチ、実行環境等に左右されます)
1
2
|
整数型実行時間 = 0.007000(秒), iCount = 10000000
実数型実行時間 = 0.038000(秒), dCount = 10000000.000000
|
int型とdouble型の違い
先述の通り、int型は比較的小さな整数値しか扱えません。その代わり、数値を正確に表現できます。
それに対してdouble型は、天文学的に大きな数値から1未満の小さな数値も扱えます。ただし、有限なビット数で大きな数を表現するため誤差が生じるのは容易に想像できるでしょう。
この誤差が曲者で、何回かの少ない計算数であれば無視できる誤差でも、何百万回と桁違いの計算をする場合、誤差を無視できなくなってくることがあります。
double型で計算回数が多くなる場合には、結果としてどの程度の誤差が出るかを予測しておかないと、思いもよらない結果が返ってくることを念頭に置いておきましょう。
変数以外でのint型の使われ方
C言語のプログラムはすべて関数で構成されています。数学における関数と考え方は同じで、具体的な値(引数)を関数に渡すと具体的な値(戻り値)が返ってきます。
int型に限らず、「型」は変数以外にも関数の引数や戻り値を指定するときにも使用します。
三角関数を例にすると、
y = sin( x )
という式であれば、sin関数に渡すxが引数で、sin関数が返してくる値が戻り値になります。
C言語の関数が数学の関数と少し異なるのは、C言語の関数は他の言語では「サブルーチン」と呼ばれているもので、処理内容はプログラマが自由に記述できるところです。
先に出てきたsin関数で例えると、「引数xを受け取ったsin関数は数学で言うところのsinを求める処理を行い、結果(戻り値)を返す」という処理をする関数ということになります。
int型変数の宣言と演算の例
C言語では、変数を使う前に必ず宣言が必要です。
その時、ローカル変数を宣言する場所は関数定義の先頭に記述するのが一般的です。また、関数の外側で宣言した変数はグローバル変数と呼ばれ、宣言した位置より下に記述されている関数すべてからのアクセスが可能です。
以下にサンプルプログラムをご紹介します。詳細は、サンプルプログラムのコメントをご覧ください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h>
int x; // グローバル変数xを宣言
/*
* add関数
* グローバル変数xと引数のint型変数aを加算した結果を返します。
*/
int add( int a )
{
return( x + a );
}
/*
* main関数
* プログラムはこのmain関数から実行開始されます。
*/
void main( void )
{
int y; // ローカル変数yの宣言です。
x = 10; // グローバル変数xに10を代入しています。
y = add( 1 ); // add関数を呼び出し、変数xに1を足した値を変数yに代入しています。
printf( "y = %d\n", y ); // 変数yの値(結果)を出力
}
|
int型の違いを理解して実践してみよう!
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。