カテゴリ: C言語 更新日: 2026/01/10

C言語の符号付き整数と符号なし整数を完全ガイド!初心者でもわかるsignedとunsignedの違い

C言語の符号付き・符号なし整数(signed, unsigned)の違い
C言語の符号付き・符号なし整数(signed, unsigned)の違い

先生と生徒の会話形式で理解しよう

生徒

「C言語で数字を保存する変数って色々ありますよね?intとかlongとか。signedとunsignedの違いがよく分からないです。」

先生

「C言語の整数型には、符号付きと符号なしという二つの考え方があります。同じ数字を保存する変数でも、扱える範囲が違うんです。」

生徒

「符号付きと符号なし…。プラスとマイナスのことですか?」

先生

「その通りです。符号付きはマイナスも使える整数、符号なしはゼロ以上の整数を扱います。それぞれにメリットがあるので、仕組みを知るとプログラムがもっと書きやすくなりますよ。」

1. 符号付き整数とは?

1. 符号付き整数とは?
1. 符号付き整数とは?

C言語の整数型で最もよく使われるのが符号付き整数です。符号付きとは、プラスとマイナスの両方を扱えるという意味で、signed intintがこれにあたります。日常生活で使う数字と同じように扱えるため、初心者がプログラムを書くときによく利用されます。

例えば、ゲームで体力が減ってマイナスになる処理や、温度のようにプラスとマイナスを扱う場合など、符号付き整数は多くの場面で活躍します。


#include <stdio.h>

int main(void){
    int a = -10;
    int b = 20;
    printf("%d\n", a + b);
    return 0;
}

符号付き整数は、マイナスの値も表現するために、内部で一ビットを符号に使います。つまり、保存できる範囲は少し減りますが、幅広い状況で使える柔軟なデータ型になります。

2. 符号なし整数とは?

2. 符号なし整数とは?
2. 符号なし整数とは?

符号なし整数は、ゼロ以上の値しか扱わない代わりに、大きな整数を保存できます。unsigned intという書き方をし、符号にビットを使わないため、全てのビットを数値として利用できます。

たとえば、ゲームでスコアや残り弾数のようにマイナスになることがない数値、または画像処理やデータサイズなど、必ずゼロ以上になるデータに最適です。


#include <stdio.h>

int main(void){
    unsigned int score = 4000;
    printf("%u\n", score);
    return 0;
}

符号なしはマイナスが存在しないため、同じサイズの整数型でもより大きい値まで保存できます。プラスだけを扱う場面では速度も安定し、Overflowエラーのチェックもしやすくなります。

3. 保存できる数値の範囲の違い

3. 保存できる数値の範囲の違い
3. 保存できる数値の範囲の違い

符号付きと符号なしの大きな違いは、保存できる値の範囲です。コンピュータの世界では、整数は二進数で記録されます。一ビットは〇か一で表現され、ビット数が増えると表現できる値も増えます。

符号付きはマイナスを扱うために一ビットを符号情報に使いますが、符号なしはゼロから始まる大きな範囲をそのまま使えます。同じビット数でも扱える範囲が変わるため、適切に選ぶとメモリを無駄にせず効率的なプログラムになります。

例えば三十二ビットの整数の場合、符号付きはマイナス二十億からプラス二十億ほど、符号なしはゼロから四十億ほどまで扱えます。プログラミング初心者でも、数字の範囲が重要になる場面が必ず出てくるので、覚えておくと役に立ちます。

4. マイナスを使わないならunsignedが便利

4. マイナスを使わないならunsignedが便利
4. マイナスを使わないならunsignedが便利

符号なしの整数は、値がゼロ以上になる状況で特に有利です。巨大なファイルサイズを扱う処理や、センサーの計測値など、マイナスにならない情報はunsignedで扱うと安全です。

さらに、符号なしの値はマイナスが使えないため、予期せぬエラーを防ぎやすくなります。例えば、ゼロからカウントダウンする処理でマイナスになった場合、意図しない大きな数値に変わってしまうことがあります。このようなミスを防ぐ意味でも、用途に合わせて型を選ぶことが重要です。

5. signedとunsignedを混ぜると注意が必要

5. signedとunsignedを混ぜると注意が必要
5. signedとunsignedを混ぜると注意が必要

符号付きと符号なしの整数を同じ計算式で扱うと、結果が思っていたものと違うことがあります。これは、内部で自動的に型変換が起きるためです。符号ありと符号なしが混ざると、符号なしが優先され、マイナスの値が非常に大きな値として扱われることがあります。


#include <stdio.h>

int main(void){
    int a = -1;
    unsigned int b = 5;
    printf("%u\n", a + b);
    return 0;
}

429496729...

このように、符号付きがマイナスでも、符号なしと計算すると桁の大きい数値になることがあります。初心者がエラーで悩む場面のひとつなので、型をそろえるか、意図的にキャストして対応することが重要です。

6. signedとunsignedの使いどころを理解しよう

6. signedとunsignedの使いどころを理解しよう
6. signedとunsignedの使いどころを理解しよう

プログラミング初心者のころは、intだけで済ませることが多いですが、より大きなデータを扱う場面やメモリ管理を意識した開発になると、符号なしの整数が重要になります。

ゼロ以上の値しか出ない場合、符号なしを使うと扱える範囲が広がり、メモリや計算処理が効率的になります。逆に、マイナスが出る可能性がある処理では、必ず符号付き整数にしなければなりません。

C言語は細かく制御できる言語なので、型の違いを知ることで安全で無駄のないプログラムを書くことができます。符号付きと符号なしを理解することは、C言語の基礎をしっかり固めるためにとても重要です。

カテゴリの一覧へ
新着記事
New1
C++
C++におけるSTL(標準テンプレートライブラリ)の役割とは?初心者でもわかる使い方と魅力
New2
C言語
C言語プロジェクトをGitHubで公開する方法を初心者向けに解説!パソコンが苦手でもわかる手順
New3
C++
C++の論理型boolを完全解説!初心者でもわかる条件式での使い方と考え方
New4
Rust
RustをWindowsにインストールする手順と注意点を完全ガイド!初心者向けセットアップ方法
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.3
Java&Spring記事人気No3
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.4
Java&Spring記事人気No4
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.5
Java&Spring記事人気No5
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.6
Java&Spring記事人気No6
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.7
Java&Spring記事人気No7
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.8
Java&Spring記事人気No8
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】