プログラミング演習I

プログラミング演習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;
}
コンパイル・実行してみよう.
整数型の大きさ(続き)
 現在の主要な環境では
 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), 1 = (1), 2 = (10), 3 = (11), ……
 nビットでのとき、n-1ビット使える.0~2^(n-1)-1
 例:0
 負の整数:すべてのビットの補数を取り(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 として表している:
= 3のとき、-3は、23 – 3 = (100) – (011) = (101). 補
数表現の求め方と一致している.
n
2の補数表現の補足(続き2)
 利点:一番上の桁を見ただけで、正負が判断
できる.
 一番上の桁が0なら正、1なら負
まとめ
 数値型の詳細(表現できる数の範囲)につい
て学んだ
 負の整数の表現方法として、2の補数表現に
ついて学んだ
レポート課題
16bitで何通りの情報が表現できるか?
 問2 同じく4byteで何通りの情報が表現できる
か?
 問3 10bitの2の補数表現で、10進の31, 96, 127, -257の2進表記を与えよ
 締め切り:2004年5月25日一杯(日本時間で)
 提出先:メールで木村([email protected])まで.
 問1