C言語の整数型とは?種類・最大値・使い分けまでわかりやすく解説

C言語では、整数を扱うために複数の型が用意されています。
int だけでなく、char や short、long などもあり、用途に応じて使い分ける必要があります。

この記事では、整数型の種類から値の範囲の考え方、signed / unsigned の違い、オーバーフローの注意点、実務での使い分けまで順番に解説します。


目次

整数型の種類(概要)

まずは、C言語で使われる整数型の一覧です。

サイズ(目安)
char1バイト
short2バイト
int4バイト
long4 or 8バイト
long long8バイト

※サイズは環境(コンパイラ・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-128127
unsigned char0255

■ 16bit(short)

最小値最大値
signed short-3276832767
unsigned short065535

■ 32bit(int)

最小値最大値
signed int-21474836482147483647
unsigned int04294967295

初心者さん

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

エンジニアくん

bitで理解すれば覚えなくていいよ


signed / unsigned の違い

C
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)

👉 特別な「引き算」などを用意しなくても
👉 普通の足し算だけで計算できる


初心者さん

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

エンジニアくん

そう。コンピュータ的に都合がいいんだよ

オーバーフローとは?(重要)

整数型には扱える範囲があります。
その範囲を超えると「オーバーフロー」が発生します。


■ 例

C
unsigned char a = 255;
a = a + 1;

結果👇

255 → 0

👉 値がループする


初心者さん

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

エンジニアくん

ならない。だから危険


■ signedの場合

C
signed char a = 127;
a = a + 1;

👉 -128 になる(環境依存の挙動もあり注意)


👉 気づきにくいバグの原因になる


型の使い分け(実務での考え方)

ここが最も重要です。


■ 基本

  • 特に制約なし → int

■ 文字/文字列

  • 文字/文字列を扱う場合→char

char型についてはこちらの記事で解説しています。


■ 範囲が決まっている

  • 年齢 → unsigned char
  • 温度 → short / int16_t

👉 必要な範囲に合わせる


■ メモリを節約

C
uint8_t buf[1000];  // 1KB
int buf[1000];      // 4KB

👉 大きな差になる


■ unsignedを使う場面

  • カウンタ
  • サイズ
  • ビット操作

⚠️ 注意

C
unsigned short a = 1;

if (a < 0)  // unsignedでは成立しない

■ 組み込みでの考え方

  • メモリ制約
  • 通信仕様
  • ハードウェア制御
C
#include <stdint.h>

uint8_t buf;
int16_t value;

👉 サイズを意識した設計が重要


さらに場合によっては浮動小数点型の使用も検討します。

浮動小数点型についてはこちらの記事で解説しています。

まとめ

  • 整数型はビット数で範囲が決まる
  • signed / unsigned で扱える値が変わる
  • 負の数は2の補数で表現される
  • オーバーフローに注意
  • 型は用途に応じて選ぶことが重要

この記事が参考になった方へ

型を含むC言語の基本文法をこちらの記事で整理しています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする


目次