2003/04/22 数の表現 数 0-9 は、記号と対応させてある 対応関係は任意 現実の世界では、一つのルールが (たまたま) 採用 十は、桁上げをする 2 進法 0-1 までを記号 ( Switch の on/of ) に対応付け 二は、桁上げをする Why ? 半導体で、十進法を実現することはできる 例 電圧を 10 段階で... => 安定性に問題 温度の影響を受けやすい => 特性を安定させるにはコストが.. (計算機を作りはじめた頃の..) 技術では 2 進回路位 しか、安定に提供できなかった 電流が流れているかいないか.. 2 進 ( on/off ) の組合せで、大きな数を.. => 現在の形式 on <-> 1 off <-> 0 対応付けを行う ( 物理から情報へ .. ) # この対応は、常に成立するわけでなく # 0/1 が反転したり、電圧で表現したり # することがある。 ## 世界によって違う 0/1 が区別できる最小の情報単位が bit 情報の記憶 CMOS 回路 計算機で扱う情報 ( の基本単位 ? ) 整数 ( 16/32/64 bit ) 浮動小数点数 ( 32/64/128 bit ) 文字 絵、 整数 ... ( 計算機で扱う「整数」は、数学的な整数の近似.. ) 数学の「整数」は、無限 計算機の「整数」は、有限桁 i.e. 32bit この「有限性」が色々とやっかい => オーバーフロー !! 自分のオケットマネーなら問題ない 国家予算だと問題 # 条件さえ整えば、区別する必要はない。 # => 条件が整っているかを判断すること !! 整数の 2 進表現 32 bit 整数 : 32 個の bit (on/of) が並んでいるもの 一つの bit は二つの状態 ( on/off .. 0/1 ) が表現可能 32 bit 整数は 2^32 個の状態が表現できる 233 01..901 00..000 .. 11..111 例 ( 3 bit 整数 : 正の数 [ 韭負の数 ] ) 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 bit パターンと整数の対応関係 ( の例 ) => 対応関係は自由 32 bit で表現可能なパターンと 整数の集合 ( 2^32 個 ) の対応関係を考える => 色々ある 例 3 bit は 8 個しか、区別できない => 対応方法は色々ある。 0 - 7 に対応 (一つの例) 1 - 8 に対応させるという手もある -4 から 3 も Okey # 0 は正負がない.. -3 から 4 も Okey # -2 から 5 でも良い.. 文字 数は、「計算」の都合で、ある程度「自然」な対応が生れる 文字の方法の対応は、本当に自由 例 ASCII (JIS) Code => 通信系なので、パターンがちょっと変 => 歴史をしらないと.. 計算機の「表現」 N bit あれば 2^N の状態が区別できる それらを何に対応させるか ? # 対応の方法を「表現」と呼ぶ 「整数」の表現例 ( 3bit で.. ) 自然数はまあ、問題ない... 負の数は ? [案 1 : 絶対値表現] 符号を表現する bit を用意する +/- 十 一 0 0 0 +00 0 0 0 1 +01 1 0 1 0 +10 2 0 1 1 +11 3 1 0 0 -00 -0 1 0 1 -01 -1 1 1 0 -10 -2 1 1 1 -11 -3 素直だが.. => -0 が ( 0 が二つ.. ) 出てしまう... # 歴史的にある。IBM 709 真空管計算機 # => Fortran が最初に載った # 7090/7094/7040/7044 トランジスタ => 廃れた.. 演算回路を作るのが大変だった (当時の技術) 例 和差の計算 演算対象の符号によって、区別する必要がある 回路が増える コストが増える 故障率が増える 演算回路を簡単にしつつ、かつ、負の数を表現するには ?? 2 の補数表現 => 原理 整数が有限であること 負の数の定義 ( 逆元 ) 回路の都合を考えるなら.. 回路はまず確定する その回路で、負の数として振舞うもの それを負の数だと思う -a は a を加えると 0 のもの.. 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 -4 1 0 1 -3 1 1 0 -2 1 1 1 -1 a の bit パターンから -a のビットパターンを作る手順 1) 0/1 を反転 2) 1 を加える 加算回路と 0/1 反転 (これは凄く簡単) だけで、減算も可能 # この加算は符号なしと同じ回路 !! => 絶対値表現では、こんなに簡単ではない.. [1 の補数表現]もある.. ( CDC 6600 .. 当時の Super Computer ) 0/1 を反転だけ.. == # 来週の話 整数は固定小数点演算と考えると...