薬学生がコンピュータ科学を独学する/2の補数記法とオーバーフロー
- 作者: J. Glenn Brookshear,神林靖,長尾高弘
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/02/18
- メディア: 大型本
- この商品を含むブログを見る
今日は予告通り,上記の書籍で学んだことを復習がてら紹介したいと思います.
現在2の補数記法がコンピュータへの整数の格納に使用されています.
(他にもいろんな記法があるみたいですが,今日はそのうちの1つを紹介します)
これを勉強するとコンピュータエラーの原因の1つが分かって少し楽しいのです.
電卓なんかで,あるケタ以上計算できないってありますよね.
コンピュータのメモリの限界のしくみが少し分かった気になります.
さて,この2の補数記法を学ぶ前に,まず2進法を簡単に知っておく必要があります.
我々が普段使用しているのは,10進数です.
人間が指で10まで数えたからだと言われていますが,
10になったらケタがあがるんですね.
0から9まで数えて,次は9を消して0に戻して,左側に1を足して10と書く.
これが2進数だと0,1と数えたところで0に戻して左に1を足して10と書きます.
2進数の10と10進数の10は違うのです.
10の次は11,その次は100,101,110,111,1000となります.
順番に数えるには,なかなか慣れが必要そうです.
さて,今日のコンピュータで整数を表現する最も一般的な体系は,2の補数記法です.
この表記法では,体系中の各値を表現するのに固定長のビット列を使用します.
今日の装置(例えば電卓)では各値を32ビットのパターンとして表現する2の補数体系が一般に使用されています.
1ビットは(0か1)です.2ビットで2ケタ目を表現します.
書籍では3ビットを例として挙げています.
枠内を見ながらの方が分かりやすいかと思います.
000からはじめて,最左端の0の後にすべて1が続くパターンを得るまで2進法で
数えて行きます.これらのパターンは値0,1,2,3を表現します.
負の値は111からはじめて,最左端の1の後にすべて0が続くパターンを得るまで
2進法で逆に数えて行きます.
これらのパターンは-1,-2,-3,-4を表現しています.
3ビット 4ビット
ビットパターン/表現する値 ビットパターン/表現する値
011 / 3 0111 / 7
010 / 2 0110 / 6
001 / 1 0101 / 5
000 / 0 0100 / 4
111 / -1 0011 / 3
110 / -2 0010 / 2
101 / -3 0001 / 1
100 / -4 0000 / 0
1111 / -1
1110 / -2
:
1010 / -6
2の補数記法では最左端のビットは値の符号を表しています(符号ビット)
また,絶対値が同じ正の値と負の値(例えば2と−2)を表現する
ビットパターン間には簡潔な関係があります.
右から左に歩みを進めていくと最初の1に至るまでは同一であり,
そこから先は0と1が互いに補なパターンです.
ここから2の補数表現を解読するアルゴリズムが得られます.
符号ビットが0であれば,(0110の場合)
そのまま符号ビットを除いて2進法で数えればいい.
2進法の110は,10進法では6です.
符号ビットが1であれば,(1010の場合)
右から数えて最初の1まではそのまま書いて,次からは反転させます(0110)
これが6なので,1010はー6となります.
この記法の長所として,加算と減算を同じアルゴリズムでこなせるというところです.
例えば減算問題7−5は,加算問題7+(−5)と同じです.
したがって装置が7(0111として格納されている)から5(0101として格納されている)を引かなければならないとしたら,まず5を−5(1011)に変換して,
その上で加算すればいい.
加算回路と値を負にする回路があれば,加算と減算の問題を解く事ができて便利なのですね.
ですが,2の補数体系には弱点があります.
表現できる値のサイズに限界があります,
上の枠内の4ビットパターンで最大の正の整数は7であり,最小の負の数は−8です.
つまり5+4の正解である値9は得られません.
実際に計算してみると,結果は−7と表現されてしまいます.
このような現象をオーバーフローと呼ぶらしいです.
もちろんほとんどのコンピュータは32ビットと長いパターンを使用しているので,
簡単にオーバーフローはしませんが,このような理由でコンピュータの計算には限界があるようです.
お分かりいただけたでしょうか.
教科書からだいぶ省いた説明ですので,
洋書にみられる巧みな表現ができていないかもしれません.
興味がありましたら,書籍の購入をお勧めします.
3800円はこの手の本にしては安いと思います.
実は独学でいろいろと作りたくて
こんな本に手を出している薬学生です.
これから少しずつコンピュータ科学を学んでいく予定です.
以前初めて購入したPIC(12F683)は8ビット(1バイト)なのですね.
ド素人の医療学生がPICマイコンでLEDを点滅させる!悪戦苦闘の4時間 - 某博士課程のblog 2
つまり今回の2の補数記法では2の7乗(128で計算あってる?)
までしか計算できないと!
貧弱すぎる!
んなわけないよなぁ・・・
なんだろう
自分の知らない事情がありそうだ(もしくは勘違いか)
これからゆっくり探っていくとしますか
楽しみすぎる.
早く国家試験終わってほしいな・・・
2の補数記法初めて知った!
って人は下記バナークリックお願いします><
↓