★文字と文字列(文字1)★


配列の扱いが終わりましたので、「文字」「文字列」について説明します。

特に「文字列」については配列が関係しますので、少しずつ説明していきましょう。


これまで「文字」の表示を何度か行ってきました。

例えば、

printf("入力してください。\n");

など書いたことがありますね。

この "(ダブルクォーテーション:二重引用符)で囲まれた文字は「文字列」と言って、「文字」が集まったものです。

「文字」とは ’(シングルクォーテーション:一重引用符)囲まれた「1文字」を表します。

ただし、「文字」と一口に言っても「半角文字」や「全角文字」があります。

<半角文字>

  A

<全角文字>

  A

分かりやすく書くと「全角文字」は「半角文字」2文字分のため、ここで「文字」と書くのは「半角1文字」のことを指すと考えてください。

例を書くと、

<文字>

  'A'、'@'など

<文字列>

  "ABC"、"Z"など

です。

※"Z"は「半角1文字」ですが、" で囲まれているため「文字列」です。


「文字」を表示するプログラムを書いてみましょう。

<sample program 077-01>

#include <stdio.h>

int main(void)
{
    printf('A');

    return 0;
}

実行しようとすると、コンパイル時点でエラーが表示されます。

printfで「文字列」を表示することはやりましたが、「文字」を表示しようとするとエラーになりました。

次のように「文字列」にするとエラーは発生しません。

<sample program 077-02>

#include <stdio.h>

int main(void)
{
    printf("A");

    return 0;
}

<実行結果>

A続行するには何かキーを押してください・・・

このように「文字」と「文字列」は違うのです。

「文字」を表示するには新しい記号が必要です。

<sample program 077-03>

#include <stdio.h>

int main(void)
{
    printf("%c\n", 'A');

    return 0;
}

<実行結果>

A
続行するには何かキーを押してください・・・

数値を表示するように、"%c"という記号を使って表示します。

試しに、「全角文字」を表示してみましょう。

<sample program 077-04>

#include <stdio.h>

int main(void)
{
    printf("%c\n", 'あ');

    return 0;
}

<実行結果>

・
続行するには何かキーを押してください・・・

まともに表示されませんね。

「全角文字」のことは一旦忘れましょう。


★char型変数★


C言語では「文字」を扱うためにchar型という変数があります。

char型は8ビットの変数で、符号ありだと-128から127まで、符号なしだと0から255までの数値が扱えます。

※コラム「変数について」参照

主に「文字」を扱う際に使うので、character(文字)の頭文字を取ってchar型と言います。

「文字」をchar型変数に代入し、表示するプログラムを作ってみます。

<sample program 077-05>

#include <stdio.h>

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

    printf("%c\n", data);

    return 0;
}

<実行結果>

A
続行するには何かキーを押してください・・・

'A'を直接表示したのと同じ結果が出ました。


続いて、この「文字」'A'を数値で表示してみましょう。

「文字」を「数値」で表示?と思うかも知れませんが、とにかくやってみます。

<sample program 077-06>

#include <stdio.h>

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

    printf("%d\n", data);

    return 0;
}

<実行結果>

65
続行するには何かキーを押してください・・・

「半角1文字」を表示する "%c" を「10進整数」を表示する"%d"に変えました。

結果は「65」と表示されています。

この数値にはきちんと意味があります。

まずは「文字コード表」を確認しましょう。

リンク先の例えにも書いてありますが、「文字」の'A'を「10進整数」で表記すると65です。

「16進数」では41になることも確認しましょう。

<sample program 077-07>

#include <stdio.h>

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

    printf("%x\n", data);

    return 0;
}

<実行結果>

41
続行するには何かキーを押してください・・・

要は「文字のA」と「10進数の65」と「16進数の41」はコンピュータの中では同じデータということです。

?と思うかもしれませんが、コンピュータはビット単位でしかデータを記憶出来ません。

上の3つは全て「0100 0001」というビット列が元データです。

このビット列を、

  「文 字」で表示すると 'A'

  「10進数」で表示すると 65

  「16進数」で表示すると 41

になるだけです。

コンピュータ側は「0100 0001」というデータを持っているだけですが、使う側の人間がどの方法で使うかを考えなければならないだけです。

そのために "%c" や "%d" や "%x" といった記号があるわけです。


それを証明するために、次のプログラムを実行してください。

<sample program 077-08>

#include <stdio.h>

int main(void)
{
    char data = 65;

    printf("%c\n", data);

    return 0;
}

<実行結果>

A
続行するには何かキーを押してください・・・

char型変数に「10進数」の65を代入し、「文字」として表示してみました。

きちんと'A'と表示されています。

「16進数」も試してみましょう。

<sample program 077-09>

#include <stdio.h>

int main(void)
{
    char data = 0x41;

    printf("%c\n", data);

    return 0;
}

<実行結果>

A
続行するには何かキーを押してください・・・

C言語で「16進数」を扱うには、数値の前に「0x(ゼロ・エックス)」または「0X」と付けます。

「16進数」の0x41を代入し、「文字」として表示すると、やはり'A'が表示されます。


コンピュータ内部での情報は2進数で扱われています。

それをどのように使うか、は使う人に任されています。

次回も「文字」について書きますが、「文字」を「数値(コード)」で見る、ということも意識しながら読んでください。


次へ

戻る

目次へ