【C言語】文字型データ(char)を理解しよう!
今回は文字型データとなる「char」を扱っていきます。基礎部分なので覚えていきましょう。
- 文字型データ(char)の理解
- 文字の表示方法
文字の型
文字・文字列の型「char」
文字を格納する変数の型を紹介します。
型名 | バイト数 | データ範囲 |
---|---|---|
char | 1 | (符号無し)0 ~ 255 (符号付き)-128 ~ 127 |
「チャー」と呼ぶ方も一定数います(年輩の方に多い)が、charは「character」(キャラクター)の略のcharですから、「キャラ型」と呼ぶ方が正しいかと思います。
char型は整数としても使用できます。上記値の範囲しか必要でないデータを使用する場合にはchar型を使用することもよくあります。
そして、char型のデータは「文字」として使うことに非常に相性がいいです。
文字データを出力する
文字型変数を宣言して、文字データを格納して、表示させる例になります。変数に文字を格納する際の注意点として、文字をシングルクォーテーション「"」で囲む必要があるということに気を付けて下さい。
それでは、下記コードを動かしてみましょう。
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int main(void) { char data = 'a'; printf("data = %c\n", data); return 0; } |
「data」という変数に「a」という文字が格納されているのが分かると思います。
printf()関数とは
ここでそろそろ「stdio.h」にて定義している標準関数、printf()について説明しておきたいと思います。printf()は、第一引数に表示させる文字列、第二引数以降は第一引数にて指定したデータ(変数、数値など)を指定して、標準出力(DOS窓)に文字列を表示する関数です。
表示させる文字列は、基本的には書いた通りのデータを表示するのですが、下記のフォーマット指定子を指定することで、第二引数以降に指定したデータ(変数など)を表示させることが出来ます。
フォーマット指定子 | 対応する型 | 表示するデータ |
---|---|---|
%c | char | 文字 |
%s | char * | 文字列 |
%d | short、int | 整数(符号付き) |
%u | unsigned short、unsigned int | 整数(符号無し) |
%x | char、short、int、 unsigned char、unsigned short、unsigned int | 整数(16進数表記) |
%f | float | 実数 |
%ld | long | 整数(符号付き) |
%lu | unsigned long | 整数(符号無し) |
%lf | double | 倍精度実数 |
現時点でまだ登場していない型については、スルーしてください。%cで文字、%dで整数が出せるんだー、ぐらいに思ってもらえたらいいです。ちなみに、最終的に使うのは「%c、%s、%d、%x、%f」ぐらいです。
また、フォーマット指定子は「桁数指定」というものが出来ます。例えば「5」を格納した変数があって、「%d」と指定すればそのまま「5」になりますが、「%03d」と指定すれば、0埋め3桁となって「005」と表示させることが出来ます。
文字と整数を出力する例がこちらです。色々といじってうごかしてみて下さい。
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main(void) { int sData = 123; char cData = 'T'; printf("sData = %d(0x%04x), cData = %c\n", sData, sData, cData); return 0; } |
アスキーコード
最初の方で、char型も数値を扱えるという説明をしたと思います。
実は、printfの「%c」指定は、変数に入っている数値をアスキーコードとして解釈し、それに対応する文字を表示させていることに他なりません。
アスキーコード(ASCIIコード)とは、特定の数値を文字として割り当てるコードになります。1byteのうち7bit(0x00~0x7f)まで、それぞれ何かの文字を割り当てています。一部抜粋すると、このような感じです。
数値(コード) | 対応する文字 |
---|---|
0x40 | @ |
0x41 | A |
0x42 | B |
0x43 | C |
また、最初の代入「data = 'a’;」は、シングルクォーテーションで囲むことにより、アスキーコードの文字をそのまま代入しているわけですが、実はアスキーコードをそのまま入れてやっても結果は同じです。以下のコードを実行してみればそれが分かると思います。
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> int main(void) { char cData = 0x40; printf("cData = %c\n", cData); return 0; } |
ASCIIコードがchar型と相性がいいのは、ASCIIコードが1byteで成り立っているからです。ゆえに文字を格納する時は、基本的にchar型を使うことになります。上記のコードで、「cData」をint型で宣言しても同じ結果になりますが、それはデータの無駄遣いとなるためやめましょう。
ここで、疑問が生じる方もいるかと思います。ASCIIコードで表現できる文字は7bit(0x00~0x7f)という説明をしました。逆に言うと、表現できる文字127種類しかありません。日本語の様な全角文字は当然大量にあり、このASCIIコードだけでは対応できません。これについては、「文字列」の後に説明しますので、今しばらくお待ちください。
まとめ
char型のデータ範囲とASCIIコード、半角文字の表示方法について、理解できたでしょうか。覚える内容が多くなってきていますが、一つずつ着実に抑えていきましょう。
次回は「浮動小数点数型」について説明します。基礎的なデータの型としては最後になりますので、頑張っていきましょう!
お疲れ様でした。
ディスカッション
コメント一覧
まだ、コメントがありません