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

2進数なお話

のblog内の新しい試みとして,長期連載物を一回やってみようかなと思っています.一週間か二週間ぐらいかけて,一つのテーマに関して掘り下げてゆく内容にしたいと思っています.もちろん,それだけ長期で書くからには,それなりの内容にしなければいけないので,資料集めを現在行っております.どんな話かは書いてからのお楽しみという事で.(開始予定は2月か3月ぐらいに出来たらいいなあと思っています.)


んで,今回はコンピュータの基礎中の基礎である2進数について復習してみようかと思います.基礎を疎かにしていたら,良いことないですからね.一回で2進数についてまとめようと思ったんですが,どうも分量計算すると一回ではおさまり切らないんで,今回は入り口だけやっていきます.

2進数はおそらく小学校に習ったかと思いますが,普通に生活している中であまり使わないかと思います.そこで,簡単にどんなものだったか説明しておきます.ネットマスクなお話をするまえにこちらの話をしておけば良かったかなとちょっと反省.

2進数とは,数そのものを0,1だけで表現する方式で,繰り上げも1の次は10となります.通常,僕たちが生活している世界は10進数という世界で,0から9までの数で表す方式ということです. コンピュータを学ぶ上で2進数は外すことは出来ません.


なぜなら,コンピュータ上で表されるものは全て2進数で表されるからです.じゃあ,なぜ2進数で全て表すのかというと,これから説明していきますが,一つは計算が楽だからという理由と,もう一つはディジタル世界を支えているのはアナログ世界だからという理由です.

アナログ,すなわち波です.波はディジタルのように0,1だけで判断はできません.0と1の間には0.1という数があったり,0.000...1という数があったりします.ですが,高い電圧(波の高い時)の時が1,低い電圧の時が0と置き換える事によって,ディジタル化されます.2進数なら波を高い低いで判別するできますが,もし10進数で全てが計算されていたら,波を10分割しなければならないんで大変です.


とまあ,コンピュータと2進数の関係について軽く説明したところで,変換してみますか.まずは基本の10進数から2進数への変換です.あ,そうそう,電卓なお話を参照しながらやると良いかもしれません.Googleなら変換も楽々です.自分の計算が合っているか確かめるにはもってこいです.

例として「10」を変換してみます.やり方は簡単,単純に「2」で割っていくだけです.答えを2で割れなくなるまでひたすら続けます.


10/2 = 5 余り 0
5/2 = 2 余り 1
2/2 = 1 余り 0
1/2 = 0 余り 1


重要なのは余りの部分です.「1010」が「10」を2進数に変換した結果という事です.この数が2進数であることを示す為には頭に「0b」を付けるか尾に「(2)」を付けるかします.「0b1010」ということですね.ちなみに,この計算の仕方は2進数に限った事ではなくて.例えば8進数でも同じ事が言えます.


10/8 = 1 余り 2
1/8 = 0 余り 1  答えは 0o12


2進数からの変換についてやってみます.基本的な考え方はこうです.一桁目の数*1,それ以降はその桁数の数*2の桁数-1乗とそれぞれの桁で計算して,その合計値という事になります.ちょっとわかりにくいかもしれませんが,こういうことです.先ほどの「10」を例にとってみます.


四桁目 1 * 2^3  (^3というのは3乗という意味)
三桁目 0 * 2^2
二桁目 1 * 2^1
一桁目 0 * 1

8 + 2 = 10


となります.余談になりますが,2進数から10進数は面倒臭いのですが,2進数から8進数や16進数に変換するのは非常に楽なのです.2進数で3桁分は8進数の1桁分に相当し,2進数で4桁分は16進数の1桁に相当するからです.(よくよく考えれば当たり前の事ですがね.) 例えば「0b101001000110」という数であった場合はこのようにします.


0b101001000110

101 001 000 110

5 1 0 6

0o5106


0b101001000110

1010 0100 0110

A 4 6     (16進数は0から9,その次はA,b,c...fと数が続きます.)

0xA46


また長くなってきました.なんか丁寧に書いていったら,予想の3分の1も書けなかったんで,引き続き明日も同じネタでいってみます.