int型の基本
プログラムを書いていると、数を扱いたい場面がたくさん出てきます。
「ループを10回繰り返したい」
「ユーザーの年齢を保存したい」
「配列の何番目かを管理したい」
など、数はプログラムのあらゆる場面で登場します。
そんなとき、C言語では「int型」を使って整数を扱います。
ここでは、int型の基本的な意味やプログラムの中での役割について見ていきましょう。
intとは何か
int型は、整数を扱うためのデータ型です。例えば、「1、2、100、-50」といった整数を扱うためのデータ型です。
「データ型」という言葉が難しく感じるかもしれませんが、「どんな種類のデータか」を表すものだと考えてください。
int型は、年齢や個数、ループの回数など、小数点を含まない数を扱う場面で頻繁に使われます。
出力結果
count: 5変数を宣言する際は「int 変数名;」という形で書きます。上記のコード例でも、実際にその形になっていることが確認できますね。
ちなみに、内部的な話をすると、この変数にメモリ上の特定の場所が割り当てられ、そこに整数の値が保存される仕組みです。
整数型としての役割
int型は、プログラムの基本的な制御に深く関わっています。
例えば、「何かの処理を10回繰り返したい」というとき、ループのカウンターとしてint型を使います。
出力結果
ループ 1回目
ループ 2回目
ループ 3回目
ループ 4回目
ループ 5回目
ループ 6回目
ループ 7回目
ループ 8回目
ループ 9回目
ループ 10回目int型が最初に学ぶ型として選ばれる理由は、このようにプログラムの基本的な仕組みと密接に関わっており、理解しやすいからです。
多くの処理で整数を扱う機会は非常に多いため、int型は最もよく使われるデータ型といっても過言ではありません。
他の整数型との位置づけ
実は、int型以外にも整数を扱う型があります。
例えば、1バイトで小さな整数や文字コードを扱うchar型、int型より大きな範囲の整数を扱うことができるlong型などです。
int型は中間に位置します。一般的な用途において、最も使いやすいサイズと範囲を持つ型なのです。
扱いたい値の大きさや用途に応じて型を使い分けることで、メモリを効率的に使ったプログラムを作ることができます。
型 |
一般的なサイズ |
用途 |
|---|---|---|
char |
1バイト |
文字・小さな整数 |
int |
2~4バイト |
一般的な整数 |
long |
4~8バイト |
大きな整数 |
int型のサイズ・バイト数と範囲の理解
int型のサイズは、実は使っている環境によって変わることがあります。
「同じint型なのにサイズが違うの?」と驚くかもしれませんね。これがC言語の特徴の一つで、プログラムを正しく動作させるためには理解しておくことが大事です。
ここでは、バイト数の基本的な考え方から、扱える数値の範囲、環境による違いの注意点まで学んでいきましょう。
バイト数とサイズの基本
まず、「バイト」という単位について確認しておきましょう。
1バイトは8ビットで、コンピュータがデータを保存する基本的な単位です。一般的な環境では、int型は4バイト(32ビット)のサイズを持つことが多いですが、古い環境や特定のシステムでは2バイトの場合もあります。
自分の環境でint型が何バイトか確認したいときは、sizeof演算子を使いましょう。この演算子を使うと、指定した型や変数が占めるバイト数がわかります。
出力結果
intのサイズ: 4バイト表現できる範囲と最大値
ビット数が多いほど、表現できる数値の範囲は大きくなります。例えば、32ビット(4バイト)のint型は、符号付きの場合、約マイナス21億から約プラス21億までの値を扱うことができます。
コンピュータは、すべての数を0と1だけで表現することをご存知でしょうか?これを「2進数」といいます。私たちが普段使う10進数(0から9の数字)とは違い、コンピュータの世界では0と1しかありません。
32ビットとは、桁数が32個あるということです。この32個の枠に0と1を入れる組み合わせの数を計算すると、全部で約43億通りのパターンになります。この43億通りを使って数を表すのですが、マイナスの数も扱いたいですよね。
そこで、43億通りのパターンを半分に分けます。約21億通りをマイナスの数に、そして残りの約21億通りをゼロとプラスの数に使います。その結果、約マイナス21億から約プラス21億までの範囲になるわけです。
ちなみに、この最大値と最小値は、limits.hというヘッダーファイルで定義されている次の定数で確認することができます。
最大値:INT_MAX
最小値:INT_MIN
出力結果
intの最大値: 2147483647
intの最小値: -2147483648環境依存の注意点
int型のサイズは、使用しているOSやコンパイラによって変わる可能性があります。
OSとは、WindowsやMac、Linuxといったコンピュータを動かす基本的なソフトウェアのことです。コンパイラは、私たちが書いたコードをコンピュータが実行できる形に変換してくれるプログラムです。これらの組み合わせによって、int型のサイズが変わる場合があります。
例えば、16ビット環境では2バイト、32ビットや64ビット環境では4バイトになることが一般的ですが、必ずしもそうとは限りません。そのため、別の環境でプログラムを動かす予定がある場合は、「移植性」を意識する必要があります。移植性とは、異なる環境でも正しく動く性質のことです。
サイズに依存しないコードを書くには、int型のサイズを決めつけず、sizeof演算子やlimits.hの定数を活用することが推奨されます。「このプログラムは4バイトだから……」と決めつけてしまうと、2バイトの環境で動かしたときに問題が起きる恐れがあるためです。
環境が変わっても安全に動作するコードを書く習慣をつけましょう。
intと他の型との違いと使い分け
C言語には、int型以外にもさまざまなデータ型があり、それぞれの型には特性があります。効率的で読みやすいプログラムを作るためには、適切に使い分けられるようになることが大事です。
最初のうちは、どれを使えばいいか迷うかもしれませんが、その特性や違いがわかると自然と使い分けられるようになると思います。
ここでは、int型と他の代表的な型との違いを学び、どんな場面でどの型を選べばいいか判断できるようになりましょう。
charとの違いとchar変換
char型は1バイトのサイズを持つ小さな型です。主に1文字を扱うために使われますが、小さな整数値も保存できます。
int型と比べてサイズが小さいため、メモリの節約になりますが、表現できる数値の範囲は-128から127(符号付きの場合)と、かなり限られています。
ちなみに、char型で保存した値をint型として扱いたい場合には「キャスト」という操作を行います。
例えば、文字コードの数値をそのまま計算に使いたいときに有用です。
出力結果
文字: A, 数値: 65この例を見ると、char型の変数'A'をint型に変換して、数値65になっているのが確認できます。
これは、コンピュータの内部で文字'A'が数値65として扱われているためです。キャストによって、その内部の数値が見えるようになったというわけです。
longとの違い
long型は、int型よりも大きな整数を扱える型です。
一般的な環境では、longは4バイトまたは8バイトのサイズを持ち、intでは収まらない大きな数値を保存できます。
型 |
一般的なサイズ |
扱える範囲の目安 |
|---|---|---|
int |
4バイト |
約-21億~21億 |
long |
4~8バイト |
約-21億~21億以上 |
人口統計や天文学的な計算など、とても大きな数を扱う場合にはlong型を選びましょう。逆に、普通の計算やカウンター程度の用途であれば、int型で十分です。
C言語は、メモリを自分でコントロールする言語です。Javaなど他の言語には自動的に管理してくれるものが多いのですが、C言語では「どれだけメモリを使うか」を意識してプログラムを書く必要があります。
たかが数バイトの差に思えますが、これが数千万、数億というデータ量になると、その差は歴然です。
アプリケーションの動作の軽快さや機器への負荷にも大きく影響してきます。
「大は小を兼ねる」と思ってlongにするのではなく、必要な大きさに応じて型を選んでメモリを無駄にしないプログラムを作ることが大事です。
doubleとの違い
double型は、小数点以下の値を扱える型です。int型は整数しか扱えませんが、doubleは3.14や0.5といった小数を保存できます。整数も扱うことができます。
これだけ聞くと「え、じゃあdouble型の方が良くない?」と感じるかもしれません。しかし、double型にもデメリットがあります。
まず、int型よりもメモリを多く使います。そして、小数の計算は整数の計算よりも時間がかかります。
さらに重要なのは、小数の計算には誤差が生じることがあるという点です。コンピュータは2進数を扱っている仕様上、小数を完全に正確には表現できないため、計算を繰り返すと微妙なズレが生じる場合があります。
用途に応じて使い分けるという考え方は、常に大切です。
出力結果
個数: 10, 割合: 3.14ちなみに、「%.2f」の「.2」は、小数点以下を何桁表示するかを指定しています。
この例では「小数点以下2桁まで表示する」という意味です。
では、「%.3f」や「%.1f」の場合はどうなるでしょうか?
試しに、書き換えて出力の違いを確認してみてください。
int型の実践的な使い方と注意点
int型の基本がわかったら、次は実際に使う上での注意点を知っておきましょう。
特に、「オーバーフロー」と「型変換」は、初心者がつまずきやすいポイントです。ここを理解しておかないと、「なぜかおかしな値になる……」「計算結果が合わない……」といった問題に悩むことになります。
ここでは、int型を安全に使うための実践的なポイントと、よくある落とし穴について学んでいきましょう。
計算時のオーバーフロー
int型には、表現できる値の範囲がある点は先ほど学びました。では、その範囲を超えて計算してしまうと、どうなるのでしょう?
この範囲を超える計算を行うと、「オーバーフロー」が発生します。簡単にいうと、int型で表現できる範囲を超えたことが原因で、数値がおかしくなってしまう現象です。
実際に確認してみましょう。
出力結果
最大値: 2147483647
最大値+1: -2147483648最大値に1を足したら、なぜかマイナスの最小値になってしまいました。
これは、コンピュータ内部でビット列が一周してしまうためです。時計の針が12時から1時に進むように、最大値の次は最小値に戻ってしまうのです。
大きな値を扱う可能性がある計算では、事前に範囲をチェックしたり、より大きな型(longなど)を使用したりして、オーバーフローを防ぎましょう。
型変換の基本ルール
異なる型同士で計算を行う場合、C言語は自動的に型を変換します。これを「暗黙の型変換」といいます。
例えば、intとdoubleを足し算すると、int型の値が自動的にdoubleに変換されて計算されます。
なお、明示的にキャストを使って型の指定もできます。暗黙の型変換では、意図せず精度の低下や値の変化を引き起こす場合があります。そのため、どのような変換が行われるかを理解し、必要に応じてキャストを使うことが重要です。
出力結果
結果: 2.50標準関数との関係
プログラムで数値を表示したり、キーボードから入力を受け取ったりするとき、printfやscanfといった関数を使います。
これらの関数でint型を扱う際には、「書式指定子」を正しく使う必要があります。
書式指定子とは、「どんな種類のデータを表示(または入力)するか」を関数に伝えるための記号です。
%(パーセント)で始まる記号で、データの型に応じて使い分けます。
代表的な書式指定子を確認しておきましょう。
- %d:int型(整数)
- %ld:long型(大きな整数)
- %f:float型、double型(小数)
- %c:char型(文字)
- %s:文字列
ここまでのコード例でも、上記の書式指定子を使っているのを確認できると思います。
出力結果
イヌの数: 3匹誤った書式指定子を使うと、値がおかしく表示されたり、プログラムが予期しない動作をしたりします。
「int型には%d」と覚えておきましょう。
ちなみに、scanf関数でキーボードから数値を受け取る際は、一つ注意点があります。それは、変数の前に「&」という記号を付ける必要がある点です。
この「&」は「この変数がある場所」を示す記号です。scanfは、キーボードから受け取った値を、指定した場所に保存する仕組みになっています。そのため、「どこに保存するか」という場所の情報が必要なのです。
初心者のうちはよく忘れるポイントなので、「scanfには&を付ける」と覚えておきましょう。
よくある質問(Q&A)
Q: int型の初期値は何ですか?
A: グローバル変数やstatic変数として宣言したint型は、自動的に0で初期化されます。
しかし、関数内のローカル変数として宣言した場合は初期化されず、不定の値が入っています。
そのため、使用前に必ず値を代入するか、次のように宣言時に初期化することが推奨されます。
出力結果
count: 0Q: unsigned intとは何ですか?
A: unsigned intは、符号なしの整数型です。
負の値を扱わない代わりに、正の値の範囲が約2倍になります。例えば、32ビット環境では0から約42億までの値を扱うことができます。
カウンターやサイズなど、負の値が不要な場合に使用すると、より大きな正の値を扱えるというメリットがあります。
Q: intとshortの違いは何ですか?
A: short型は、int型より小さいサイズの整数型で、一般的に2バイトです。
扱える値の範囲が狭い代わりに、メモリの使用量を抑えられます。大量の小さな整数を配列で扱いたい場合や、メモリ節約が必要な状況で有用です。
Q: int型で小数を扱うとどうなりますか?
A: int型に小数を代入すると、小数点以下が切り捨てられ、整数部分のみが保存されます。例えば、3.9をint型の変数に代入すると、値は3になります。
小数を扱う必要がある場合は、doubleやfloat型を使用するようにしましょう。
出力結果
3Q: int型の計算結果が予想と違う理由は?
A: 整数同士の除算(割り算)では、結果も整数になるため、小数点以下が切り捨てられます。例えば、5÷2の結果は2.5ではなく2になるということです。
小数の結果が必要な場合は、どちらか一方をdouble型にキャストしてから計算する必要があります。
まとめ
この記事では、C言語におけるint型の基本から実践的な使い方まで解説してきました。
ここまで学んできた内容を振り返ってみましょう。
int型の基本
- 一般的に4バイトのサイズで、約-21億から21億の範囲を扱える
- 環境によってサイズが変わる可能性がある
- 整数を扱うプログラムの基本的な制御で頻繁に利用する
他の型との使い分け
- char型は、1バイトで小さな整数や文字を扱う
- long型は、より大きな整数を扱う
- double型は、小数を扱う
実践的な注意点
- 必要な大きさに応じて型を選び、メモリを無駄にしないプログラムを作ることが重要
- 扱える範囲を超えると予期しない値になるオーバーフローに注意する
- 暗黙の型変換やキャストによる型変換のルールを理解する
- 書式指定子を正しく使う
int型をマスターできると、プログラミングの基礎が固まります。特にC言語では、メモリ管理も深く関わっているため、int型を通じて「コンピュータがどのように数を扱っているか」という本質的な部分を理解できます。
この知識はC言語だけでなく、他のプログラミング言語を学ぶときにも役立つでしょう。「なぜこの型を使うのか」「メモリはどう使われているのか」といった根本的な理解があると、どんな言語でも応用が効くようになるからです。
int型の使い方を学び、仕組みを理解した後は実際にたくさんコードを書き、プログラミングのスキルを実践レベルまで上げていきましょう。