プログラミング演習I 2003年5月7日(第4回) 木村巌
知識編:C言語の初等文法 いくつかの型の詳細 条件文
実践編:条件文、ループ構文を 用いたプログラミング If文をつかったプログラミング
いくつかの型の詳細 前回、整数型、浮動小数点数型、文字型について学んだ それらの型が表現できる範囲をはっきりさせておこう!
ビットとバイト 1bitとは、2進表記一桁で表現できる情報量のこと 端的にいうと、0か1. 1byteとは、8bitのこと.つまり、0, 1が8桁. (00000000)から、(11111111)まで、256通りの組み合わせがある キロバイト、メガバイト、ギガバイト、テラバイト
整数型の詳細 int型は、short, 指定なし, longの三種類の大きさと、signed, unsignedの符号の有無の区別がある. 略記:short intはshort, long intはlongと略記可能 sizeof 演算子……sizeof(型名)で、型が占めるメモリの大きさを返す
整数型の大きさ #include <stdio.h> int main(void) { printf (“short %d\nint %d\nlong %d\n”, sizeof (short), sizeof (int), sizeof (long)); return 0; } sizeofint.cとして保存し、コンパイル&実行してみよう.
整数型の大きさ(続き) 現在の主要な環境では limits.hに個々の値の上下限が定義されている(ANSI Cの要請) short 2byte, int 4byte, long int 4byte C99ではlong longも定義されており、8byte となることが多い. 個々のサイズがANSI Cで定義されているわけではない!定義では、 2≦sizeof(short)≦sizeof(int)≦4≦sizeof(long) limits.hに個々の値の上下限が定義されている(ANSI Cの要請)
2の補数表現 符号付整数のビット列としての表現法 正の整数:単純に2進表現する 例:0 = (0), 1 = (1), 2 = (10), 3 = (11), …… nビットでのとき、n-1ビット使える.0~2n-1-1 負の整数:すべてのビットの補数を取り(1を0に、0を1にする)、更に1加える 例:-1→(000…0001)ー補数→(111…1110)ー1加える→(111…1111) = -1.
2の補数表現(続き) 負の最大値(100…000)または-2^(n-1)に相当する正の整数は存在しない.この値が負にされても、同じ値になる. 符号付整数のビット列としての表現には、他に 1の補数表現 符号ビットを独立に持つ表現 がある.正の整数の表現はどれも同じ.
符号なし整数 unsignedを指定すると、正の整数のみあらわす:unsigned short, unsigned int, unsigned long. n bitで0から(2^n)-1までを表現 (111…111)は符号なしの場合(2^n)-1.符号付で2の補数表現なら、-1である. 符号なし整数に対する算術演算は、すべて2^nを法として行われる.
符号なし整数(続き) #include <stdio.h> int main (void) { printf ("%u\n", 0xffffffff + 0x1); return 0; } uint.cとして保存、コンパイルして実行すると幾つになるか?
文字型 char型.char, signed char, unsigned charの3つ 占めるメモリは同じ.多くの場合、sizeof(char) = sizeof (signed char) = sizeof (unsigned char) = 1. ANSI Cで定義されているわけではない.limits.hのCHAR_BITという定数を参照. getchar()を使うときに、戻り値をcharとするとトラブルの元(intとすべき).詳細は後述.
浮動小数点数型 float, double, long doubleの3種類 それぞれの大きさはANSI Cでは規定されていない sizeof()演算子でバイト幅を調べよ! floatで表せる範囲はdoubleでも表せ、doubleで表せる範囲はlong doubleでも表せる doubleとlongとは多くの場合相互変換可能(だが、ANSI Cでは規定されていない)
浮動小数点型(続き)
浮動小数点数型(続き) 32bit doubleの場合、符号に1bit, 指数に7bit, 仮数部に24bit使う. 64bit long doubleの場合、符号に1bit, 指数に10bit, 仮数部に53bit使う.
条件文 すでに何回か使ったように、if文によって、プログラムの実行を制御できる. if (式) 文 式が0でないときのみ、文を実行する.
条件文(続き) if (式) { 文 } 複数の文を実行したいときは、複数の文を{} で囲う.複合文という.
条件文(続き3) if (式) 文1 else 文2 式が0でなければ、文1が、そうでない(式が0)なら、文2が実行される.
まとめ 数値型の詳細(表現できる数の範囲)について学んだ 条件文について学んだ
レポート課題 問1 16bitで何通りの情報が表現できるか? 問2 同じく4byteで何通りの情報が表現できるか? 別紙資料「浮動小数点数」の問を解け 締め切り:2003年5月6日一杯(日本時間で) 提出先:メールで木村(iwao@sci.toyama-u.ac.jp)まで.