コンピューターの内部では, 2つの値しか取り得ない1ビットを最小単位として, 演算, 記憶が行なわれている. 2進数により, ビットを単位とする値を直接表記できる.
ビットより大きな扱いやすい単位として, 8ビットを1単位とする 1バイトが用いられる. 16進数により, バイトを単位とする値を直接表記できる.
!,",',#など) の文字が内部でどのように表現されているか(すなわち文字コード)を調べよ.
文字コードは16進数, 2進数の2種類で表現すること.
講義終了時に, 上で作成したプログラムと実行した結果を全てをメールで送ること. 本文に, 氏名, 学籍番号を明記すること.
文字は char で宣言し, 英数字1文字分を表現できる.
| 型 | 宣言 | printfの書式 | scanfの書式 |
| 文字 | char c; | printf("c = %c", c); | scanf("%c", &c); |
| 整数 | int n; | printf("n = %d", n); | scanf("%d", &n); |
| 実数 | double x; | printf("x = %f", x); | scanf("%lf", &x); |
文字定数(文字リテラル)は, シングルクォーテションで囲んで 'a' のように表わす.
文字列(文字列リテラル)は, ダブるクォーテーションで囲んで "abcdefg" のように表す. 文字列は, これまでにprintf関数への第1引数などで用いている.
「文字」は1文字のみを意味し, 「文字列」は0個も含め複数の文字の並びを意味する.
例
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c = 'A';
printf("c = [%c], c = %d\n", c, c);
return EXIT_SUCCESS;
}
上の例のうち char c = 'A'; の部分を, char c = 'B'; などように置き換えて文字リテラルの扱い方を 練習しておくこと. 特殊な文字も同様に次のように表すことができる. 詳細は 教科書 p. 203 Table 8-2 拡張表記を参照のこと.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("[%c]\n", '\a');
printf("[%c]\n", '\b');
printf("[%c]\n", '\t');
printf("[%c]\n", '\n');
printf("[%c]\n", '\'');
printf("[%c]\n", '\"');
printf("[%c]\n", '\?');
printf("[%c]\n", '\\');
printf("[%c]\n", '\123'); // 8進数
printf("[%c]\n", '\x2a'); // 16進数
return EXIT_SUCCESS;
}
文字列に対しても,
例えば printf("abc\tdef\nghi\n"); を実行すると,
abc と def の間にタブ(\t)が出力され,
def と ghi の間や ghi の後ろに改行(\n)が出力される.
このような 文字列中で用いられる拡張表記は,
文字に対して用いる拡張表記(Table 8-2)と同一である.
内部では, char 型は2ビットの並び(数)として表されていて, 何番がどの文字を表すかを, 予め定められたテーブルに従って変換する. 教科書 p. 200参照のこと.
文字コードを出力するプログラム. コメントにしてある部分のように 文字コードにより文字を初期化することもできる.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c = 'A';
char c8 = 0123; // 8進数で表した文字.
char c16 = 0x2a; // 16進数で表した文字.
// c を出力
printf("cを文字として出力 : [%c]\n", c);
printf("cのコードを10進数で出力: [%d]\n", c);
printf("cのコードを16進数で出力: [%x]\n", c);
return EXIT_SUCCESS;
}
(c)1999-2013 Tetsuya Makimura