C言語基礎|整数型と文字型

C言語で「整数」を扱うとき、いちばん大事なのは どのくらいの範囲の数を、どういうルールで表すか を自分で選べることです。
その選択肢が、文字型(char 系)を含む整数型 なんですね。

  • 負の数も扱うなら 符号付き(signed)
  • 0以上だけでいいなら 符号無し(unsigned)
  • さらに「表現できる範囲」を広げたいなら short / int / long / long long を使い分ける

ここから先は、型の名前が増えてちょっとワチャっとしますが、表で整理するとスッキリ理解できますよ。

「有限範囲の連続した整数」ってどういう意味?

整数型は、ざっくり言うと ある範囲の整数が、連続して並んでいる 型です。
たとえば「10個の連続した整数」が必要だとします。

連続した整数の例

符号付きの例(負もOK)
-5 -4 -3 -2 -1  0  1  2  3  4

符号無しの例(0以上だけ)
 0  1  2  3  4  5  6  7  8  9

この2つの違いが、そのまま signed と unsigned の違いになります。

signed と unsigned の違い(まずはここ!)

符号付き整数型と符号無し整数型

種類表せる値ざっくりイメージ使いどころ
signed(符号付き)負 / 0 / 正真ん中に0がある温度差、増減、誤差、位置、計算結果
unsigned(符号無し)0 / 正0から始まる個数、サイズ、インデックス、ビット操作

ポイントは「unsigned は負がない分、同じビット数なら正の範囲が広い」ってことです。

宣言で決まる:signed / unsigned の基本ルール

型を決めるのは 宣言 です。ここで signed / unsigned を付けるだけ。

宣言例と意味

宣言その変数の型意味
int x;signed intふつうは符号付き扱い
signed int y;signed int明示的に符号付き
unsigned int z;unsigned int0以上のみ

※ int 系(short / int / long / long long)は、何も付けなければ signed 扱いが基本です(char は例外があるので後で丁寧にやります)。

整数型は「大きさ」でも選べる

整数型には「表現できる範囲」を変えるための段階があります。

整数型の“高さ”イメージ

ここでいう「低い・高い」は 表現できる範囲(だいたいサイズ) の感覚です。

整数型の分類を一気に整理

整数型の分類(char 系+int 系)

グループ代表
符号付き整数型signed 系signed char / short / int / long / long long
文字型char 系char
符号無し整数型unsigned 系unsigned char / unsigned short / unsigned int / unsigned long / unsigned long long

ここで注意が1つあります。
char は signed 扱いと決め打ちできない環境があるので、文字として使うか数として使うかで、書き方を使い分けるのが安全です。

型名は省略できる(でも規則がある)

型名は長いので、省略できるルールが用意されています。これを知らないと「short って何?」ってなります。

省略のルール(重要)

書き方実際の意味
shortshort int
longlong int
long longlong long int
unsignedunsigned int
signedsigned int
int 系で signed/unsigned を省略基本は signed 扱い

型名の一覧(短縮名までまとめて整理)

ユーザー文書の Table 7-2 に相当する内容を、読みやすく表に再構成します。

整数型(文字型・int系型)の名称と短縮名

種類フルネーム例省略できる表記(同じ型)
文字型signed charsigned char
文字型unsigned charunsigned char
文字型charchar
int系signed short intsigned short / short int / short
int系signed intsigned / int
int系signed long intsigned long / long int / long
int系signed long long intsigned long long / long long int / long long
int系unsigned short intunsigned short
int系unsigned intunsigned
int系unsigned long intunsigned long
int系unsigned long long intunsigned long long

「右端が最短表記」という考え方で、普段は short / long / unsigned みたいに短く書くことが多いです。

サンプルプログラム

同じ数値を signed と unsigned で表示したり、char を文字と数として見せるプログラムを例に解説をします。

プロジェクト名:chap7-5-1 ソースファイル名:chap7-5-1.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 整数型と文字型の見え方を確認するサンプル

#include <stdio.h>

int main(void)
{
    signed int si = -10;
    unsigned int ui = 10;

    char ch = 'A';
    signed char sc = -5;
    unsigned char uc = 250;

    puts("整数型と文字型の表示をチェックします。");

    printf("signed int  si = %d\n", si);
    printf("unsigned int ui = %u\n", ui);

    puts("char は文字としても、数としても見せられます。");
    printf("char ch = %c (文字) / %d (数)\n", ch, ch);

    puts("signed char / unsigned char も整数として扱えます。");
    printf("signed char   sc = %d\n", sc);
    printf("unsigned char uc = %u\n", uc);

    return 0;
}

登場する命令の書式と「何をするか」

puts

  • 書式:puts(文字列);
  • 何をする:文字列を表示して改行する(案内文に向く)

printf

  • 書式:printf(書式文字列, 値, ...);
  • 何をする:書式に合わせて表示する

書式指定子(今回よく使う)

指定子意味
%d符号付き整数として表示signed int, short, signed char など
%u符号無し整数として表示unsigned int, unsigned char など
%c文字として表示char

※ char を %d で出すと「文字コードの数値」が見えます。これ、学習にすごく便利です。

同じ中身でも“見せ方”で意味が変わる

値の正体表示方法見え方
char ch = 'A'%cA
char ch = 'A'%d65(Aの文字コード)
unsigned char uc = 250%u250
signed char sc = -5%d-5

char は「文字」でも「小さい整数」でもある

char
  ├─ 文字として使う(%c)
  └─ 数として使う(%d)