2進数なお話 その2 | もっとコンピュータが好きになるblog

2進数なお話 その2

Amazonで中古本4冊買ったうち,2冊来ました.嬉しいなぁ.でもまだあと3冊欲しい本があるんですよねぇ.それから毎月大体買ってる専門誌も買うから,んー,正月早々財政難です.でも読まなくても本は迷わず買うが信念ですから,買うぞ~.


前回は2進数の基礎的な部分をふれてみました.次は2進数使う理由に挙げた「計算が楽」という理由の部分,2進数の計算についてみてゆこうと思います.

まず基本の足し算です.これはわかりやすいと思います.あ,そうそう今回はコンピュータと2進数という話なんで,今回ここでの計算は8bit(2進数にして8桁,10進数だと0~255までの数)の計算という事にします.ま,繰り上がっても9桁目の数は無視されるというだけの話ですから,気楽に見てください.

0b00110011 + 0b00001111という計算をしてみます.1 + 1 = 10,つまり繰り上がる事だけ気にしていけば,そんなに難しくないはずです.

  0b00110011
 + 0b00001111
--------------
  0b01000010

といった感じですね.実際に正しいか10進数に直してみてみましょうか.

0b00110011 は 32+16+2+1=51
0b00001111 は 8+4+2+1=15
51+15=66
66を2進数に変換すると

66/2 = 33 0
33/2 = 16 1
16/2 = 8 0
8/2 = 4 0
4/2 = 2 0
2/2 = 1 0
1/2 = 0 1

0b01000010となって正しい事がわかります.これは簡単.


次はかけ算やわり算をみてみます.2進数は面白いことに値を右に一つずらすと2分の1になり左に一つずらすと2倍の数になります.ちょっと見てみます.

0b00000100 は10進数で4です.右にずらすと
0b00001000 となり,10進数で2倍の8になります.
0b00000100 と右にずらせは4になり,2分の1になりました.

これをシフト演算と呼び,左にずらしてゆくと2倍,4倍,8倍,16倍の数に,逆に右にずらしてゆくと2分の1,4分の1,8分の1,16分の1の数になってしまいます.ちなみに1があふれてしまったら無視します.こんな感じ.

0b11110000 を右にずらす
0b01111000 を左に2つずらす
0b11100000 となります.代わりに0が入ってくるんですね.


もちろんずらすやり方ではないかけ算もします.この方法は普通の10進数の方法とだいたい同じです.

例えば0b00000100 * 0b00000011の場合はこうします.

  0b00000100
 * 0b00000011
-------------
  0b00000100
  0b00000100  (ここの部分はシフト演算ですね)
-------------
  0b00001100 (あくまでも8bitなので)

ここで確認してほしいのは,かけ算は足し算で出来ていることです.つまるところ,足し算さえ出来ればかけ算が出来るということです.また長くなったので,今回も尻切れトンボの状態でここで終わりますが,次回は引き算も足し算でする方法を紹介します.

ここまで言えば大体わかってもらえると思いますが,つまり2進数では全ての四則演算を足し算で計算可能という事です.次回も引き続き読んで頂いて,計算が簡単な理由をもう少しみてゆくことにします.