2進数における負の数と少数の表現方法
2進数は基本的に"0"と"1"でのみ,表現される.
では,2進数で負の数や少数をどのように表しているのだろうか.
2進数における負の数の表現方法
補数
補数とは文字通り補う数という意味であり,元々の数からある数を得るために付け加え,補う数のことである.1の補数と2の補数が存在する.
1の補数
その桁数で最大値を得るために補う数のこと.
例:0011
1111 - 0011 = 1100
A.1100
ちなみにビットを反転させれば,解を得ることができる.
0011 →反転→ 1100
2の補数
次の桁に繰り上がるために補う数のこと.
例:0011
10000 - 0011 = 1101
1の補数と同様,簡単な求め方が存在する.1の補数を求めて(全ビットを反転させて),1を加えるだけ.
0011 →1の補数(反転)→ 1100 →1を加える→ 1101
なんで補数なんてやったの?
まぁタイトルからわかるように,負の数もしくは小数を表すのに必要なんだよね.ぶっちゃけると2の補数そのものが負の数となる. 仮に3 + (-3) = 0を計算してみると
0011 + 1101 = 10000
となる.4ビットで考えたときに,繰り上がりを無視すると答えは0となり,実際の計算とも一致するってわけ.ちなみに,このようにすると最上位ビットで符号がわかる.最上位ビットが0の場合は正の数もしくは0となり,1の場合は負の数となる.
2進数における少数の表現方法
固定小数点数と浮動小数点数の二通りが存在.おそらく小数表記でよく使われるのは浮動小数点数の方.ちなみに「浮動」少数点数であって,「不動」少数点数でないので注意.(こう書くとほとんど固定少数点数と意味が同じになってしまう...)
固定小数点数
小数点の位置がある位置に固定であると定義して,数を表現する方法.基本的に整数は一番右(最下位ビットの右)に小数点があると考えて,この方法を用いている.
0000.0000
これなら整数部4ビット,小数部4ビット使用できるし
000000.00
なら整数部6ビット,小数部2ビット使用できるって感じ.
00000000.
で整数を表すって使用するのが主な目的なのかな?
浮動小数点数
少数を指数表記して,"符号","仮数","指数"で数を表現する方法.
例えば,0.0025って数があった場合に,0.25×10-3って表現するのが指数表記.符号はわかると思うけど,仮数は0.25のこと,指数は-3のことを指す.ちなみに10は基数と言う.例は10進数で扱ったが,コンピュータの中では2進数なので,2となる.
つまり少数を
(符号)m×2e
と表記して,符号とmとeで数を表現しようってこと.
表現方法としては,ビットの一番上に符号を入れ,次に指数部を,最後に仮数を入れるって感じ.
例:0.1101×2^-4
符号|指数|仮数 → 0|11100|1101000000 → 0111001101000000
指数や仮数の桁数は規格によって形式化されている.次回くらいにそのあたりを書けたらいいな.