2008年6月28日土曜日

【パタヘネ】3章 コンピュータにおける算術演算

体調をくずしたので、調子が戻るまではゆっくり。


  • 3.1 はじめに

    • 特になし。

  • 3.2 符号付き数と符号なし数

    • 自分なりの整理を書いてみる。
    • コンピュータの中では数字は二進数で表現する。

      • そうすると電気回路のon/offで表現するのが簡単である。
      • 例えば、レジスタにセットされたbitをそのまま2進数の数と解釈することが可能となる。

    • 表現と解釈について。
    • 正の数は簡単。
    • 負の数をどうする。
    • 負の表し方はいろいろある。
    • ハードウエアの効率がよい方法にきまった。
    • それは2の補数の考え方を利用したものだった。
    • まず補数とは?

      • N進法において、a に足して全体の桁が1つ上がるような最小の自然数を「N進法における a に対する N の補数」という。
      • N進法において、a に足しても桁が上がらない最大の自然数を「N進法における a に対する (N-1) の補数」という。

    • 32bitで2進数の数を表現することにする。
    • 0...0を0(base10)とする。
    • 0...01を1(base10)とする。01...1を2147483647(base10)とする。
    • すなわち下位31bitで正の整数を表現する。
    • ここで、0...01の32bit(全部)で2進数の数であるとする。
    • すると、これの2の補数は、0...01である。0...01 + 0...01 = 0...010。
    • で、これは負数の表現には使えない。
    • 補数の定義では、「aに足して全体の桁が1つ上がるような最小の自然数」とあるところを、「aに足して架空の33bit目に桁が1つ上がるような最小の自然数」と変更する。
    • すると、0...01の修正版2の補数は、1...1となる。
    • こうすると、0...01 + 1...1 = (1)0...0となり、33bit目への桁あふれが適切に対処される(無視される)なら、これは0...0になり、1(base10)に足して結果が0(base10)になるものだから、これは-1(base10)の表現に適している。
    • さて、1の補数も同様に修正すると、0...01の1の補数は1..10であり、元の数の01を反転させたものである。これは二進数の足し算と桁上がりの性質からわかる便法である。
    • 1の補数に1(base10)を加えたものが2の補数であることは、補数および修正補数どちらにしても補数の定義そのものなので自明。
    • なので、ある数の表現に対する負数の表現を求めるには、元の数の表現を01反転した上で1を足せばよい。
    • 結果として、最上位ビットが0ならば0または正の整数であり、1ならば負の整数となる。



こんな感じかなぁ。

0 件のコメント: