しがない大学生の備忘録

しがない大学生が研究やプログラムに関することを忘れないためにメモしておく備忘録。他の人の役にも立つといいな。

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

指数や仮数の桁数は規格によって形式化されている.次回くらいにそのあたりを書けたらいいな.