1+1=10が困り者

上段:投稿日 中段:カテゴリ 下段:サブテーマ ブログナンバー: 79
    
08月21日(月)
IT関連のカタカナ語と略語ABCに強くなるブログ (26)
コンピュータは桁あふれをどうするか
 
 コンピュータを考えた人も大変な問題に直面しただろう。人間ができないどんな計算もできると思ったら,意外にも人間ならできるがコンピュータにはできないものがある。電卓でおわかりのように8桁電卓なら答が9桁になる”たかが足し算”ができないのだ。人間なら紙に書いて10桁の足し算くらいは1分以内にできてしまう。

 1バイトは8桁で表せるから,表現できる負でない整数は途中飛ばしであるが,こんな風になる。 00000000,00000001,00000011,00000111,00001111,00011111,00111111,01111111,11111111
十進数では, 0,1,3,7,15,31,63,127,255
これらに1を加えるとどれも桁数はひとつ増える。
00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000,00000000
十進数では, 1,2,4,8,16,32,64,128,0
255は256にはなれず0になる。
今度は10をかけるとどうなるか。
00000010,00000100,00001000,00010000,00100000,01000000,10000000,00000000,00000000
十進数では, 2,4,8,16,32,64,128,0,0
かけた10は十進数でいえば2を意味する。10をかけると何進法でも数字の位置がひとつ左へ移動する。このことを左へひとつシフトするというらしい。逆に10で割れば右へ1だけシフトする。
 マイナスの数はどうするのだろう。-1010101は見たことがない。コンピュータは0か1しか記号を持たないから,プラスを0,マイナスを1と決めたらどうか。8桁しか使えない整数を負の整数まで広げると,桁をひとつ減らさなければならない。-1を表すのに,11ではおかしい。1をつければいいわけではない。1をつける桁位置を決めておけば負の数であることがわかる。11111111は最初の1がマイナスを表す数で7桁の数と考えればいい。するとこれは十進数で-127ということになる。すると11111110は-126,順に減らしていくと10000001は-1,10000000は-0で+0と同じとなる。しかしコンピュータにとって,10000000と00000000とが同じとは面白くない。計算を間違えそうだ。なんとかして欲しいと叫びが聞こえてくる。

 コンピュータは11111111に1を加えると容赦なく00000000にしてしまう。1を加えて0になる数? これは-1ではないか。同じように,11111110に10を加えるとやはりコンピュータは0にしてしまう。読みかえれば2を加えてる0になる数は-2であるといえるから,8桁で考えたとしても,11111110は11111111より1だけ小さいすなわち-2としよう。これで辻褄が合う。こうして,コンピュータは,-2,-1,0,1,2の整数を 11111110,11111111,00000000,00000001,00000010
の如く理解し,桁あふれの部分が-1から0になるという形で解決したのである。最小の7桁の整数はー128(10000000)で最大の整数は127(01111111)となる。10000000は8けたでは128を表し,符合つき7けたでは-128を表す。話がうまくできすぎていると思う。
コメント ( 2 ) | Trackback ( 0 )