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進数では全ての四則演算を足し算で計算可能という事です.次回も引き続き読んで頂いて,計算が簡単な理由をもう少しみてゆくことにします.
前回は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進数では全ての四則演算を足し算で計算可能という事です.次回も引き続き読んで頂いて,計算が簡単な理由をもう少しみてゆくことにします.