【C言語】文字型データ(char)を理解しよう!

2020年7月5日

今回は文字型データとなる「char」を扱っていきます。基礎部分なので覚えていきましょう。

  • 文字型データ(char)の理解
  • 文字の表示方法

文字の型

文字・文字列の型「char」

文字を格納する変数の型を紹介します。

型名バイト数データ範囲
char1(符号無し)0 ~ 255
(符号付き)-128 ~ 127

「チャー」と呼ぶ方も一定数います(年輩の方に多い)が、charは「character」(キャラクター)の略のcharですから、「キャラ型」と呼ぶ方が正しいかと思います。

char型は整数としても使用できます。上記値の範囲しか必要でないデータを使用する場合にはchar型を使用することもよくあります。

そして、char型のデータは「文字」として使うことに非常に相性がいいです。

文字データを出力する

文字型変数を宣言して、文字データを格納して、表示させる例になります。変数に文字を格納する際の注意点として、文字をシングルクォーテーション「"」で囲む必要があるということに気を付けて下さい。

それでは、下記コードを動かしてみましょう。

data = a

「data」という変数に「a」という文字が格納されているのが分かると思います。

printf()関数とは

ここでそろそろ「stdio.h」にて定義している標準関数、printf()について説明しておきたいと思います。printf()は、第一引数に表示させる文字列、第二引数以降は第一引数にて指定したデータ(変数、数値など)を指定して、標準出力(DOS窓)に文字列を表示する関数です。

printf(“表示させる文字列", データ);

表示させる文字列は、基本的には書いた通りのデータを表示するのですが、下記のフォーマット指定子を指定することで、第二引数以降に指定したデータ(変数など)を表示させることが出来ます。

フォーマット指定子対応する型表示するデータ
%cchar文字
%schar *文字列
%dshort、int整数(符号付き)
%uunsigned short、unsigned int整数(符号無し)
%xchar、short、int、
unsigned char、unsigned short、unsigned int
整数(16進数表記)
%ffloat実数
%ldlong整数(符号付き)
%luunsigned long整数(符号無し)
%lfdouble倍精度実数

現時点でまだ登場していない型については、スルーしてください。%cで文字、%dで整数が出せるんだー、ぐらいに思ってもらえたらいいです。ちなみに、最終的に使うのは「%c、%s、%d、%x、%f」ぐらいです。

標準関数のリファレンス(使用方法)については、「C言語 printf」等と検索したらいくらでも出てくるので、覚えておきましょう。

また、フォーマット指定子は「桁数指定」というものが出来ます。例えば「5」を格納した変数があって、「%d」と指定すればそのまま「5」になりますが、「%03d」と指定すれば、0埋め3桁となって「005」と表示させることが出来ます。

文字と整数を出力する例がこちらです。色々といじってうごかしてみて下さい。

sData = 123(0x007b), cData = T

アスキーコード

最初の方で、char型も数値を扱えるという説明をしたと思います。

実は、printfの「%c」指定は、変数に入っている数値をアスキーコードとして解釈し、それに対応する文字を表示させていることに他なりません。

アスキーコード(ASCIIコード)とは、特定の数値を文字として割り当てるコードになります。1byteのうち7bit(0x00~0x7f)まで、それぞれ何かの文字を割り当てています。一部抜粋すると、このような感じです。

数値(コード)対応する文字
0x40@
0x41A
0x42B
0x43C

また、最初の代入「data = 'a’;」は、シングルクォーテーションで囲むことにより、アスキーコードの文字をそのまま代入しているわけですが、実はアスキーコードをそのまま入れてやっても結果は同じです。以下のコードを実行してみればそれが分かると思います。

cData = @

ASCIIコードがchar型と相性がいいのは、ASCIIコードが1byteで成り立っているからです。ゆえに文字を格納する時は、基本的にchar型を使うことになります。上記のコードで、「cData」をint型で宣言しても同じ結果になりますが、それはデータの無駄遣いとなるためやめましょう。

ここで、疑問が生じる方もいるかと思います。ASCIIコードで表現できる文字は7bit(0x00~0x7f)という説明をしました。逆に言うと、表現できる文字127種類しかありません。日本語の様な全角文字は当然大量にあり、このASCIIコードだけでは対応できません。これについては、「文字列」の後に説明しますので、今しばらくお待ちください。

まとめ

char型のデータ範囲とASCIIコード、半角文字の表示方法について、理解できたでしょうか。覚える内容が多くなってきていますが、一つずつ着実に抑えていきましょう。

次回は「浮動小数点数型」について説明します。基礎的なデータの型としては最後になりますので、頑張っていきましょう!

お疲れ様でした。