390 likes | 646 Views
数の表現方法 ・ 演算. 基本情報技術概論 ( 第2回 ). 埼玉大学 理工学研究科 堀山 貴史. 前回の復習. 単位 bit, byte n 進数 2進数 0, 1, 10, 11, 100, 101, … 8進数 0, 1, 2, … , 6, 7, 10, 11, 12, … 16 進数 0, 1, 2, … , 9, A, B, C, D, E, F, 10, … 基数の 変換
E N D
数の表現方法 ・ 演算 基本情報技術概論 (第2回) 埼玉大学 理工学研究科 堀山 貴史
前回の復習 • 単位 • bit, byte • n 進数 • 2進数 0, 1, 10, 11, 100, 101, … • 8進数 0, 1, 2, …, 6, 7, 10, 11, 12, … • 16進数 0, 1, 2, …, 9, A, B, C, D, E, F, 10, … • 基数の変換 • 2A . 18 (16) …2 x 16 + 10 x 1 + 1 x 1/16 + 8 / 162(10) • 1011 . 1 (2) … 001 011 . 100 (2) = 1 3 . 4 (8) • k, M, G, T / m, μ, n ________________
前回の復習 (2) 例) • 数値の表現方法 0 0 0 1 1 0 0 1 1 9 整数 符号なし整数 符号付き整数 絶対値表現 1 -1 1の補数 1 -6 2の補数 1 -7 最上位ビットを符号として使う 小数 固定小数点数 浮動小数点数
小数の表現方法 ________________ • 固定小数点数 • 小数点の位置を固定 • 浮動小数点数に比べて、数値表現の範囲が狭い (大きな数、小さな数が扱えない) 例) 1000000(2)は? 0.00001(2)は? • 演算が容易 • 最上位ビットを符号とみて、符号付きの数も扱える
小数の表現方法 指数部 -0.1 x 2 11 ________________ 符号部 仮数部 • 浮動小数点数 • 固定小数点数に比べて、数値表現の範囲が広い 例) 1000000(2)は 0.1 x 27 0.00001(2) は 0.1 x 2 -4 • 注意: 正規化が必要 仮数部の左端から0が並んでいると、 有効数字が小さくなる。これを防ぐため、 0.1 x 2○ という形にする。 符号部 指数部 仮数部
小数の表現方法 指数部 -0.1 x 2 11 符号部 仮数部 • 浮動小数点数 (形式その1) • 符号部 : 仮数部の符号 0:正 1:負 • 仮数部 : 符号を取り除いた絶対値正規化 0.1○○○ • 指数部 : 正の数も負の数も、ありえる2の補数表現 符号部(S) 指数部(E) 仮数部(M) 1 bit 7 bit 24 bit (-1) S x 0.M x 2E
小数の表現方法 指数部 -0.1 x 2 11 符号部 仮数部 • 浮動小数点数 (形式その2) • 符号部 : 仮数部の符号 0:正 1:負 • 仮数部 : 符号を取り除いた絶対値正規化 1.○○○ • 指数部 : 正の数も負の数も、ありえる指数部にバイアス (127) が加わっている 符号部(S) 指数部(E) 仮数部(M) 1 bit 8 bit 23 bit バイアス127を引く バイアス127を加える (-1) S x 1.M x 2E-127
小数の表現方法 指数部 -0.1 x 2 11 符号部 仮数部 • IEEE 浮動小数点数 • 単精度 (4バイト : 32ビット) • 倍精度 (8バイト : 64ビット) • 形式その2を使う (倍精度のバイアスは1023) float 符号部 指数部 仮数部 1 bit 8 bit 23 bit double 符号部 指数部 仮数部 1 bit 11 bit 52 bit
加算 • 10進数の加算と同様に、下位の桁からの 桁上がり ( キャリー ) を足していく ________________ 例)4 bit 符号なし整数 1 1 1 1 1 0100 + 0110 1111 + 0001 0 0 1 1 0 1 0 0 0 ________________ 注意: オーバーフロー 演算結果が、表現できる数値の範囲より外側に 超えてしまうことがある
減算 • 10進数の加算と同様に、下位の桁からの 桁借り ( ボロー ) を引いていく ________________ 例)4 bit 符号なし整数 1 1 1 1 1 1010 - 0110 0000 - 0001 1 1 0 0 0 ? 1 1 1 注意: オーバーフロー 演算結果が、表現できる数値の範囲より外側に 超えてしまうことがある
減算 (方法2) • 2の補数表現を使って、加算 例) 4 - 1 = 4 + (-1) 1 1 0100 + 1111 … 4 … -1 0 1 0 1 1 … 3 2の補数表現では無視する
正+正=負 負+負=正 2の補数表現の加算 • 2の補数表現を使って、加算 例) 4 + 4 1 0100 + 0100 … 4 … +4 0 1 0 0 … 8? 注意: オーバーフロー 演算結果が、表現できる数値の範囲より外側に 超えてしまうことがある
x x 1 0 1 0 0 1 1 0 シフト演算 • 論理シフト • ビット列を左や右に移動させる • あふれた値は捨てる • 空いたところには 0 を入れる 例) 左シフト 右シフト 1 1 0 1 1 1 0 1
… -3 1 1 0 1 x … -6 1 0 1 0 シフト演算 • 算術シフト • 符号ビットを保持する • 2の補数表現で、 2倍(左シフト)や 1/2倍(右シフト)に対応 例) 左シフト … 1 0 0 0 1 x … 2 0 0 1 0
… 2 … -6 0 0 1 0 1 0 1 0 x x … 1 … -3 0 0 0 1 1 1 0 1 シフト演算 • 算術シフト • 符号ビットを保持する • 2の補数表現で、 2倍(左シフト)や 1/2倍(右シフト)に対応 例) 右シフト
0101 … 5 … 1101 1000011 … 67 1101 1111 1101 10 1101 0000 1101 0000 1000001 … 2 … 65 乗除算 • シフトと加減算を組み合わせて実現する 1101 x 0101 … 13 … 5
用語: 誤差 ________________ • オーバーフロー • 演算結果が、表現できる数値の範囲より 外側に超えること • アンダーフロー • 浮動小数点演算では、オーバーフローの他に アンダーフローも起こりえる • 演算結果が、表現できる数値の範囲より 細かな数になること ________________ 数値範囲 0 数直線 オーバーフロー アンダーフロー オーバーフロー
用語: 誤差 ________________ • 情報落ち • 浮動小数点演算において、 絶対値の大きな数 と 絶対値の小さな数 の 加減算で、絶対値の小さな数の有効桁数の一部または全部が 演算結果に反映されないことで生じる 例) 0.10100(2) x 24– 0.10001(2) x 2-8 • 桁落ち • 浮動小数点演算において、 値がほぼ等しい数同士の加減算で、 有効桁数が大幅に減ってしまう 例) 0.10000011 x 24 - 0.10000010 x 24 = 0.10000000 x 2-3 ________________ 意味があるのはこの桁のみ
用語: 誤差 ________________ • 打切り誤差 • 演算を途中で打ち切ったことで発生する誤差 例) sin x を x – x3/3! で計算 (本当は、 x – x3/3! + x5/5! – x7/7! + ・・・ と続く) • 丸め誤差 • 最下位桁より小さい部分について、 丸め(四捨五入や切り上げ、切捨て)を 行うことによって生じる誤差 例) 10/3 = 3.333…→ 3.3 ________________
文字の表現方法 • 文字コード 文字集合(扱う文字の集合)の 符号化方式(どのように2進数を対応させるか)を 定めたもの
ASCII コード ________________ • ANSI (American National Standards Institute)で 制定された7ビットのコード • 英数字、記号、 制御コードからなる 例) A の文字コード 1000001
より多くの文字を取り扱うために ... ________________ • JIS コード • ISO-2022 を符号化方式とした7ビット 1~2バイトのコード • 電子メールのやりとりには、ISO-2022-JP の符号化方式を用いるのが主流 • シフト JIS • JIS コードと同じ文字集合 (8ビット 1~2バイト) • 以前の Windows や MacOSでは、内部処理用のコードとして主に利用された(現在でも、ユーザはファイル保存時に使える) ________________
より多くの文字を取り扱うために ... ________________ • EUC (EUC-JP) : 拡張 Unix コード • JIS コードと同じ文字集合 (8ビット 1~2バイト) • 主に Unix で用いられる • Unicode • 世界中の言語で使う文字を1つのコード体系に納め(ようとしてい)るコード • Window,Mac OS X,Unix 等の最近の OS で標準的に扱える • 符号化方式には、UTF-8 や UTF-16 が用いられる ________________
論理演算 • 2進数の四則演算 (+, -, ×, ÷) は、 0, 1 を操作すれば実現できる • 与えられた 0, 1 (入力) から、 計算結果の 0, 1 (出力) を得る仕組みを作ろう!
f= A f= ¬ A A f A f 0 1 1 0 f= A ・ B f= A ∧ B AND (論理積) A f B OR (論理和) A f= A + B f= A ∨ B f A B f 0 0 0 0 1 0 1 0 0 1 1 1 A B f 0 0 0 0 1 1 1 0 1 1 1 1 A B f 0 0 0 0 1 1 1 0 1 1 1 0 B f= A + B XOR (排他的 論理和) A f B 回路記号 真理値表 論理式 論理演算 NOT (否定)
f= A f= ¬ A A f A f 0 1 1 0 A f B A B f 0 0 1 0 1 1 1 0 1 1 1 0 A B f 0 0 0 0 1 0 1 0 0 1 1 1 論理演算: NAND 回路記号 真理値表 論理式 論理演算 NOT (否定) f= A ・ B f= A ∧ B AND (論理積) f= A ・ B f= A ∧ B A NAND f B
f= A f= ¬ A A f A f 0 1 1 0 A A f f A B f 0 0 0 0 1 1 1 0 1 1 1 1 A B f 0 0 1 0 1 0 1 0 0 1 1 0 B B 論理演算: NOR 回路記号 真理値表 論理式 論理演算 NOT (否定) f= A + B f= A ∨ B OR (論理和) f= A + B f= A ∨ B NOR
f= A f= ¬ A 論理演算: 否定 (NOT) • 入力の否定 (0, 1 を反転させる) 入力 出力 A f 真理値表 回路記号 論理式 A f 0 1 1 0
論理演算: 論理積 (AND) • A とB どちらも 1 なら、fも 1 A f B 真理値表 回路記号 論理式 A B f 0 0 0 0 1 0 1 0 0 1 1 1 f= A ・ B f= A ∧ B
論理演算: 論理和 (OR) • A または B が 1 なら、fも 1 A f B 真理値表 回路記号 論理式 A B f 0 0 0 0 1 1 1 0 1 1 1 1 f= A + B f= A ∨ B
論理演算: 排他的論理和(XOR, EOR, EXOR) • A または B 一方のみが 1 なら、fも 1 A f B 真理値表 回路記号 論理式 A B f 0 0 0 0 1 1 1 0 1 1 1 0 f= A + B
この文面は、TOKYO TECH OCW の利用条件を参考にしました この教材のご利用について • この教材は、以下に示す利用条件の下で、著作権者にわざわざ許諾を求めることなく、無償で自由にご利用いただけます。講義、自主学習はもちろん、翻訳、改変、再配布等を含めて自由にご利用ください。 • 非商業利用に限定 • この教材は、翻訳や改変等を加えたものも含めて、著作権者の許諾を受けずに商業目的で利用することは、許可されていません。 • 著作権の帰属 • この教材および教材中の図の著作権は、次ページ以降に示す著作者に帰属します。この教材、または翻訳や改変等を加えたものを公開される場合には、「本教材 (or 本資料) は http://www.al.ics. saitama-u.ac.jp/horiyama/OCW/ の教材です (or 教材を改変したものです」 との旨の著作権表示を明確に実施してください。なお、この教材に改変等を加えたものの著作権は、次ページ以降に示す著作者および改変等を加えた方に帰属します。 • 同一条件での頒布・再頒布 • この教材、または翻訳や改変等を加えたものを頒布・再頒布する場合には、頒布・再頒布の形態を問わず、このページの利用条件に準拠して無償で自由に利用できるようにしてください。
この教材のご利用について • 配布場所 • http://www.al.ics.saitama-u.ac.jp/horiyama/OCW/ • この powerpointファイルの著作者 • 堀山 貴史 2007-2009 horiyama@al.ics.saitama-u.ac.jp • 改変等を加えられた場合は、お名前等を追加してください • 図の著作者 • p. 26 • クリップアート :Microsoft Office Online / クリップアート • その他 • 堀山 貴史