コンピューターの内部では, 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