課題 (1) printf文とsizeof演算子を用いて、int型、short型、long型、unsigned int型、unsigned short型、unsigned long型の記憶領域の大きさを下記の様な形式で表示するプログラムを作れ。 size of int = 4 size of short = 2 ・・・ (2) それぞれの整数のデータ型について、とりうる最小の値ととりうる最大の値を10進数で求めよ(8ページ上に書いてある2^31-1といった指数表記を実際に計算せよという意味、プログラムで計算する必要はなく、Excelでも手計算でもよい) (3)初心者用課題:2,4,8,2^6,2^8,2^16をそれぞれ2進数、16進数で表せ。1,3,7,2^6-1,2^8-1,2^16-1をそれぞれ2進数、16進数で表せ(プログラムで計算する必要はなく、Excelでも手計算でもよい)。 (4) 計算の結果が、変数がとりうる値の範囲に無い場合、どのようなことが起きるか。arith.cに大きな値を入力して確かめて見よ。(仕組みは分からなくてよいから、int型がとりうる範囲を少しだけ上に超えた場合、下に超えた場合、また大きく越えた場合にはどうなるかなど、典型的なケースを試して見よ) (5) printf文で、%dの代わりに、%lx(4バイト変数用)、%hx(2バイト変数用)を用いると、値を16進数で表示することが出来る。これを使ってarith.cを改造し10進数に加えて16進数でも値が表示されるようしたプログラムを作成せよ。負の数がどのように表現されているのか考えて見よ。また(3)の結果を説明せよ。214748367と1を入力したとき、和が負の値になるのはなぜか説明せよ。 (6) 発展課題:scanf文で、変数仕様と値が入力される変数の型が一致しないとき、どのようなことが起きるかを次のようなプログラムで確かめてみた。short型の値の範囲を超えた数値(たとえば80000)を入力して、表示結果を説明せよ。 #include int main(void) { short s0,s,s1; s0=0; s1=0; scanf("%d",&s); printf("s0 = %hd\n",s0); printf("s = %hd\n",s); printf("s1 = %hd\n",s1); } (7) 発展課題:scanf文を使って、float型、double型の変数にそれぞれ実数値を入力し,16進数で表示するプログラムを作成せよ。printf文では、4バイト変数を16進数表示する場合%lxを、8バイト変数を16進数表示する場合%llxを用いよ。1.0,2.0,4.0,8.0,0.5,0.25,0.125,-2.0などを入力して、実数値がどのように表現されているかを考えて見よ。 (8)#define文の中の整数演算はどのような型を使って行われているか確かめたい。long型の範囲を超えるような整数演算を記述するとどうなるか。 (9)先週の課題に、エスケープシーケンスの例として、"\033[34mtest\033[0m\n"という文字列があった。これを1バイトごとに16進数に直すとどうなるか。たとえば"test"の部分は、74 65 73 74である。\033や\nは1バイトの文字であることに注意すること。'\n'の文字コードを知るにはどのようなプログラムを作成すればよいか。