C言語学習ポータル(無料版) 学習コンテンツ 変数・型・演算子 char型と文字コード

📦 変数・型・演算子

char型と文字コード

無料公開版に収録・読む目安 11分

🎯 charが1バイトの小さな整数であることを理解し、文字と数値を相互に変換できる

コンピュータは文字も数として持っています。charは1文字を入れる箱ですが、その正体はとても小さい整数です。

文字は数である

#include <stdio.h>

int main(void) {
    char c = 'A';

    printf("%c\n", c);   // 文字として表示
    printf("%d\n", c);   // 数として表示
    return 0;
}

出力は A と 65 です。'A' は文字コード(ASCII)で65番。同じ箱の中身を、%c で見るか %d で見るかの違いしかありません。

覚えておくと便利な番号は3つ。'A' が65、'a' が97、'0' が48です。大文字と小文字はちょうど32離れています。

数として扱えるから計算できる

#include <stdio.h>

int main(void) {
    char dai = 'C';
    char sho = dai + 32;       // 大文字→小文字
    char moji = '7';
    int  suuchi = moji - '0';  // 文字の'7' を 数の7 に

    printf("%c %c\n", dai, sho);
    printf("%d\n", suuchi * 2);
    return 0;
}

出力は C c と 14。'7' - '0' は 55 - 48 = 7 です。文字の数字を本物の数値に変えるこの式は、この先いたるところで登場します。

シングルクォートとダブルクォート

・'A' … 文字1つ。char に入る。
・"A" … 文字列。中身は 'A' と終端記号の2つ分(トラック9で扱います)。

別物です。char c = "A"; は型が合わずエラーになります。

動く例——見えない文字にも番号がある

#include <stdio.h>

int main(void) {
    printf("[%c] %d\n", 'A', 'A');
    printf("[%c] %d\n", 'Z', 'Z');
    printf("[%c] %d\n", '0', '0');
    printf("[%c] %d\n", ' ', ' ');
    return 0;
}

最後の行は空白文字です。画面には何も見えませんが、32番という番号がきちんと振られています。

罠・注意

日本語1文字は char に入らない。 UTF-8では「あ」は3バイトです。1バイトの char には収まりません。日本語1文字を扱う話は見た目より複雑で、トラック9で改めて扱います。

char が符号付きかどうかは環境依存。 -128〜127 の環境と 0〜255 の環境があります。128以上の値を char に入れて比較するコードは移植性を失います。

'A' の型は char ではなく int。 Cでは文字定数は int として扱われます。あとで sizeof('A') が 4 になるのを見て驚かないよう、ここで言っておきます。

ビット文字は数、数は文字。行き来できるようになると、暗号やちょっとしたゲーム処理が急に書けるようになるよ。

まとめ

char は1バイトの小さな整数で、文字コードを通して文字を表します。'A'=65、'0'=48、大文字と小文字の差は32。'7' - '0' で数字文字を数値にできます。'A' と "A" は別物、日本語1文字は char に収まりません。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

char型きゃらがた

1文字を表すための型のこと。実体は小さな整数であり、文字コード表に基づいて数値と文字が対応づけられている。'A'のようにシングルクォートで1文字を囲んで書き表す。

int型いんとがた

整数を扱うための基本的な型のこと。小数点を持たない数値を格納する、C言語でもっとも使う機会の多い型のひとつにあたる。環境にもよるが、多くの場合4バイトの大きさで値を保持している。

型かた

変数に入れられる値の種類と、確保するメモリの大きさを決める分類のこと。箱の形や大きさを決めるルールのようなものだと考えるとよい。int・double・charなど、C言語にはあらかじめ複数の型が用意されている。

同じトラックのほかの項目

変数とは名前付きの箱宣言・代入・初期化を区別し、型のついた変数を正しく作って使える int型と整数の世界intの範囲と限界値の調べ方を知り、long long・unsignedの使いどころが分かる 浮動小数点数 float / doubledoubleを既定として使い分け、小数に必ず誤差があることと比較の作法を理解する bool型と真偽——C23標準の書き方C23のbool/true/falseをそのまま使い、Cにおける真偽(0が偽・0以外が真)を説明できる 定数——const と constexprconstとconstexpr(C23)を使い分け、変わらない値を宣言時に固定できる 算術演算子と優先順位5つの算術演算子と優先順位を理解し、複合代入・インクリメントを正しく使える 整数の割り算と剰余の罠整数どうしの割り算が切り捨てになる理由を理解し、平均計算などで正しく対処できる 型変換——暗黙と明示暗黙の型変換が起きる方向を知り、キャストで意図を明示できる 2進数・16進数リテラル(0b / 0x / 桁区切り')0b・0x・8進の書き方の違いを理解し、C23の桁区切りで読みやすく数値を書ける sizeofとメモリ上のサイズsizeofで型と変数のバイト数を測り、型ごとに箱の大きさが違うことを実感できる オーバーフローという事件オーバーフローが起きる仕組みと危険性を理解し、桁の見積もりと予防策を実行できる
‹ 浮動小数点数 float / double bool型と真偽——C23標準の書き方 ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH