プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌
ビットとバイト 1bitとは、2進表記一桁で表現できる情報量のこと 端的にいうと、0か1. 1byteとは、8bitのこと.つまり、0, 1が8桁. (00000000)から、(11111111)まで、256通りの組み合わせがある キロバイト(KB)、メガバイト(MB)、ギガバイト(GB)、テラバイト(TB) 教科書p.51参照
整数型の詳細 教科書p.49の表3-1参照 int型は、short, 指定なし, longの三種類の大きさと、signed, unsignedの符号の有無の区別がある. 略記:short intはshort, long intはlongと略記可能 sizeof 演算子……sizeof(型名)で、型が占めるメモリの大きさを返す
整数型の大きさ /* sizeofint.c */ #include <stdio.h> int main(void) { printf (“short %d\nint %d\nlong %d\n”, sizeof (short), sizeof (int), sizeof (long)); return 0; } コンパイル・実行してみよう.
整数型の大きさ(続き) 現在の主要な環境では 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~2^(n-1)-1 負の整数:すべてのビットの補数を取り(1を0に、0を1にする)、更に1加える 例:-1→(000…0001)ー[補数]→(111…1110)ー[1加える]→(111…1111) = -1.
2の補数表現(続き) 負の最大値(100…000)または-2n-1に相当する正の整数は存在しない.この値が負にされても、同じ値になる. 符号付整数のビット列としての表現には、他に 1の補数表現 符号ビットを独立に持つ表現 がある.正の整数の表現はどれも同じ.
2の補数表現の補足 負の整数:すべてのビットの補数を取り(1を0に、0を1にする)、更に1加える どうしてこれでよいのか? 例:-1→(000…0001)ー[補数]→(111…1110)ー[1加える]→(111…1111) = -1. どうしてこれでよいのか? 1 + (-1) = (000…0001) + (111…1111) = (000…0000) = 0. ただし、最後の桁上がりは無視する
2の補数表現の補足(続き) n bitの2の補数表現では、n-1 bit使って、0から2n-1-1を表現 負の数-aは、2n – a として表している: n = 3のとき、-3は、23 – 3 = (100) – (011) = (101). 補数表現の求め方と一致している.
2の補数表現の補足(続き2) 利点:一番上の桁を見ただけで、正負が判断できる. 一番上の桁が0なら正、1なら負
まとめ 数値型の詳細(表現できる数の範囲)について学んだ 負の整数の表現方法として、2の補数表現について学んだ
レポート課題 問1 16bitで何通りの情報が表現できるか? 問2 同じく4byteで何通りの情報が表現できるか? 締め切り:2004年5月25日一杯(日本時間で) 提出先:メールで木村(iwao@sci.toyama-u.ac.jp)まで.