0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事について

「C言語の基礎を学ぼう」をテーマに、自身の知識 + α をアドベントカレンダーにまとめます。
25日間でC言語をマスターしよう - Qiita Advent Calendar 2025 - Qiita

こんな方を対象としています

  • コンピュータがプログラムをどのように動かしているか知りたい/知らない方

  • プログラミングをしてみたい方

  • C言語初心者の方

キーワード

  • char

  • 文字コード

説明

char

主に文字を扱う型に char があります。サイズは 1バイト です。

#include <stdio.h>
int main(void) {
    char ch = 'a';
    printf("%c\n", ch);
    printf("%d", (int)sizeof(char));
    return 0;
}
a
1

文字(1文字)は ' で囲みます。文字列は "で囲みます。

charも他の型と同じようにメモリに2進数で保存されます。
文字を2進数で扱う仕組みとして、 文字コード があります。

文字コード

文字コードは、2進数(10進数、16進数でも表現されます)と文字の対応を決めた規則です。

C言語では文字コードとして ASCIIコード(アスキーコード) が使用されます。

ASCIIコードの対応表は下記のようになっています。
暗記する必要はありませんが、 アルファベットや数字は連続した値で管理されている ことは知っておくと便利です。
ASCII文字コード表 - IT用語辞典 e-Words

ASCIIコードで A は 65 です。実際に見てみましょう。char型の変数を %d で出力します。

#include <stdio.h>
int main(void) {
    char ch = 'A';
    printf("%d", ch);
    return 0;
}
65

ASCIIコードはすべて1バイトで表現されている文字コードです。日本語はありません。
日本語を扱う場合、Shift_JIS(CP932)またはUTF-8がよく使われます。

各文字コードは下記のようになっており、C言語のchar(1バイト)で日本語の文字を扱うことはできません。

  • Shift_JIS:ASCIIコード + 日本語(2バイト)

  • UTF-8:ASCIIコード + 日本語(3バイト以上) + 他言語

練習

1. アルファベット表を作ろう

下記のようなアルファベット表を表示しよう。

Aa Bb Cc Dd Ee Ff Gg 
Hh Ii Jj Kk Ll Mm Nn
Oo Pp Qq Rr Ss Tt Uu
Vv Ww Xx Yy Zz

ポイント

ASCIIコードの性質を利用します。 'A' + 1 = 'B' です。

解答例

#include <stdio.h>
int main(void) {
    int i;
    for (i = 0; i < 26; i++) {
        printf("%c%c ", 'A' + i, 'a' + i);
        if ((i + 1) % 7 == 0) {
            printf("\n");
        }
    }
    return 0;
}
Aa Bb Cc Dd Ee Ff Gg 
Hh Ii Jj Kk Ll Mm Nn
Oo Pp Qq Rr Ss Tt Uu
Vv Ww Xx Yy Zz

2. 数字を数値に変換しよう

char型の '0''9' をint型の 09 に変換しよう。

char: 0 1 2 3 4 5 6 7 8 9 
int:  0 1 2 3 4 5 6 7 8 9

ポイント

ASCIIコードの性質を利用します。 '0' + 1 = '1' です。

解答例

#include <stdio.h>
int main(void) {
    char c_num[10] = {
        '0', '1', '2', '3', '4',
        '5', '6', '7', '8', '9'
    };
    int i_num[10], i;
    for (i = 0; i < 10; i++) {
        i_num[i] = c_num[i] - '0'; // 数値に変換
    }
    printf("char: ");
    for (i = 0; i < 10; i++) {
        printf("%c ", c_num[i]);
    }
    printf("\nint:  ");
    for (i = 0; i < 10; i++) {
        printf("%d ", i_num[i]);
    }
    return 0;
}
char: 0 1 2 3 4 5 6 7 8 9 
int:  0 1 2 3 4 5 6 7 8 9

文字と数値の変換はよく使われます。

おわりに

文字も数値で管理されています。
C言語で文字を扱うと文字コードの理解が深まる気がしますね。

参考文献

↓↓↓ はじめてプログラミングを学んだときに読んだ本です ↓↓↓
詳細(プログラミング入門 C言語)|プログラミング|情報|実教出版

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?