C言語では、整数を扱うために複数の型が用意されています。
int だけでなく、char や short、long などもあり、用途に応じて使い分ける必要があります。
この記事では、整数型の種類から値の範囲の考え方、signed / unsigned の違い、オーバーフローの注意点、実務での使い分けまで順番に解説します。
整数型の種類(概要)
まずは、C言語で使われる整数型の一覧です。
| 型 | サイズ(目安) |
|---|---|
| char | 1バイト |
| short | 2バイト |
| int | 4バイト |
| long | 4 or 8バイト |
| long long | 8バイト |
※サイズは環境(コンパイラ・CPU)によって異なります
初心者さんintだけじゃダメなんですか?



動くことは多いけど、それだと無駄が出ることもあるんだよね
型に関する基本的な内容はこちらの記事でも解説しています。


C言語文法解説シリーズ
本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。
C言語文法解説シリーズ一覧はこちら


ビット(bit)と値の範囲の関係



最大値ってなんで255とかになるんですか?



それはビットで決まる
コンピュータでは、データはすべて 0 と 1 の組み合わせで表現されます。
この1つ1つをビット(bit)と呼びます。
例えば、1バイトは8ビットです。
00000000 ~ 11111111
■ unsigned の場合
すべてのビットを数値として使えるため👇
- 最小値:0
- 最大値:255
👉 0 ~ 255 の範囲になる



全部1にしたら最大なんですね



そういうことだね
■ signed の場合
signed では1ビットを符号に使います。
👉 その結果👇
- -128 ~ 127 の範囲になる
※ 負の数は2の補数で表現されます(後で解説)
最大値・最小値(一覧)
■ 8bit(char)
| 型 | 最小値 | 最大値 |
|---|---|---|
| signed char | -128 | 127 |
| unsigned char | 0 | 255 |
■ 16bit(short)
| 型 | 最小値 | 最大値 |
|---|---|---|
| signed short | -32768 | 32767 |
| unsigned short | 0 | 65535 |
■ 32bit(int)
| 型 | 最小値 | 最大値 |
|---|---|---|
| signed int | -2147483648 | 2147483647 |
| unsigned int | 0 | 4294967295 |



これ覚えないとダメですか?



bitで理解すれば覚えなくていいよ
signed / unsigned の違い
int a; // signed
unsigned int b; // unsigned- signed → 負の値を扱える
- unsigned → 0以上のみ
👉 同じビット数でも範囲が変わる
2の補数とは?(負の数の仕組み)
例:+5 → -5
① ビット反転
0000 0101 → 1111 1010
② 1を足す
1111 1010 → 1111 1011
👉 これが -5



なんでこんな面倒なことするんですか?



足し算で扱えるようにするためだよ
C言語では、整数の計算は基本的に「ビットの加算(足し算)」で行われます。
2の補数を使うことで、負の数も含めて同じ足し算の仕組みで計算できるようになります。
例えば👇
0000 0101 (+5)
+ 1111 1011 (-5)
0000 0000 (0)
👉 特別な「引き算」などを用意しなくても
👉 普通の足し算だけで計算できる



なるほど、だからこの形なんですね



そう。コンピュータ的に都合がいいんだよ
オーバーフローとは?(重要)
整数型には扱える範囲があります。
その範囲を超えると「オーバーフロー」が発生します。
■ 例
unsigned char a = 255;
a = a + 1;結果👇
255 → 0
👉 値がループする



え、エラーにならないんですか?



ならない。だから危険
■ signedの場合
signed char a = 127;
a = a + 1;👉 -128 になる(環境依存の挙動もあり注意)
👉 気づきにくいバグの原因になる
型の使い分け(実務での考え方)
ここが最も重要です。
■ 基本
- 特に制約なし → int
■ 文字/文字列
- 文字/文字列を扱う場合→char
char型についてはこちらの記事で解説しています。


■ 範囲が決まっている
- 年齢 → unsigned char
- 温度 → short / int16_t
👉 必要な範囲に合わせる
■ メモリを節約
uint8_t buf[1000]; // 1KB
int buf[1000]; // 4KB👉 大きな差になる
■ unsignedを使う場面
- カウンタ
- サイズ
- ビット操作
⚠️ 注意
unsigned short a = 1;
if (a < 0) // unsignedでは成立しない■ 組み込みでの考え方
- メモリ制約
- 通信仕様
- ハードウェア制御
#include <stdint.h>
uint8_t buf;
int16_t value;👉 サイズを意識した設計が重要
さらに場合によっては浮動小数点型の使用も検討します。
浮動小数点型についてはこちらの記事で解説しています。


まとめ
- 整数型はビット数で範囲が決まる
- signed / unsigned で扱える値が変わる
- 負の数は2の補数で表現される
- オーバーフローに注意
- 型は用途に応じて選ぶことが重要
この記事が参考になった方へ
型を含むC言語の基本文法をこちらの記事で整理しています。


技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。









コメント