基本情報技術を学んだ事がある人、学んでいる最中の人がいずれも悩んだ事があるだろうn進数の計算。
自分もその一人でした…。ですが、その状態から脱却すべく必死になって勉強した結果ある程度はわかる様になったので自分なりにわかりやすく解釈したものをここに残そうと思います。
#■n進数とは
ではまずn進数とはなんぞ?ってかたのために説明します。
ただ、あーだこーだと長ったらしく説明したくないので簡単すると、
「コンピュータが我々人間の言葉を理解できるようにした言語のようなもの」です。
ああ…。専門の人たちに怒られそう…。笑
コンピュータは今も昔も同じく電源のON/OFF(1と0)でしか認識する事ができません。
そのため我々人間がコンピュータにも理解できるように仕方な〜く用意したのが2進数という考え方でした。
2進数というのは数字の1と0だけで表現する考え方で例えば10進数から2進数に置き換える例を挙げると
6(10進数)=110(2進数) 、4(10進数)=100(2進数)
のような書き方をします。
基本的にはこの2進数だけでコンピュータの世界は表現されます。
がしかし…。現代になるとそれ以外の考え方が存在します(これがまたややこしいんだよ…。)。それが8進数、16進数という考え方です。
8進数、16進数という考え方は実は2進数ありきで作られたものになります。
数字が変わっても結局考え方は2進数同じで10進数を8、16で表現したものになるだけです。
ではなんで全部2進数で表現しないの?無駄じゃん?って思うかもしれません。
はい。その通りです。なんでややこしくなるだけのものを作ったのだ…。(すいませんちゃんと必要です。)
これも説明するとややこしくなりそうなので簡単に説明しますと、
「8進数→2進数の3桁まで、16進数→2進数の4桁までを表現するのにぴったりだから!」
以上です…。(詳しく知りたい人はググってね♡)
#■n進数の基本変換について
では次にそれら2、8、16進数をそれぞれ置き換えるための考え方について説明していきます。
先ほどの説明からも10進数をかくn進数別に表現すると言いましたが、この置き換えを基本変換と呼んでいます。
基本変換にはやり方があります。それぞれ紹介します。
##【格桁の重みを使う方法】
例) 13.357(10進数)を置き換える場合
格桁の重み | … | n^3 | n^2 | n^1 | n^0 | . | n^-1 | n^-2 | n^-3 | … |
---|---|---|---|---|---|---|---|---|---|---|
2進数 | … | 1 | 1 | 0 | 1 | . | 0 | 1 | 1 | … |
8進数 | … | - | - | 1 | 5 | . | 3 | - | - | … |
16進数 | … | - | - | - | D | . | 6 | - | - | … |
やり方は10進数の数値を「格桁の重み」で割った値を入力していく形になる
ただこのやり方は現実的じゃないので別の簡単な方法を使うと良い
##【割り算と掛け算を使う方法】
例) 13.357(10進数)を置き換える場合
手順1・・・整数部分と少数部分に分ける
この場合
整数部分・・・13
少数部分・・・0.375
となる
手順2・・・置き換えたいn進数で整数部分を割り算、少数部分を掛け算する。
整数部分は割った時の余りの数値を小さい順に並べ替える
少数部分は掛けた時の繰り上げした数値
この場合
■2進数
整数部分・・・13→6(1)→3(0)→1(1)、0(1)
結果1101となる
少数部分・・・0.375→0.75→1.5→1.0
結果011となる
答え 1101.011
※()は割ったあまりの数
手順3・・・8進数と16進数においては2進数からの変換が簡単なため、一度2進数に置き換えて考える
■8進数・・・8=2^3より2進数の3桁を表現するため3桁毎に区切る
1101.011
↓ 3桁毎に置き換えると
|1|101|.|011|
↓それぞれを10進数に戻すと
|1|5|.|3|
↓
結果15.3となる
■16進数・・・16=2^3より2進数の4桁を表現するため4桁毎に区切る
1101.011
↓ 4桁毎に置き換えると
|1101|.|0110|
↓それぞれを10進数に戻すと
|13|.|4|
↓16表記だと
|D|.|4|
↓
結果D.4となる
#次回は…
以上がn進数における基本変換の方法です。
現在基本情報技術を勉強している者としてこのn進数を理解するのはある意味一つの障壁なのかなと思っています…。
正直自分はこれを実務に生かせる気がしません…。笑
でも資格取得に向けては必要な知識なのは確かなので、覚えておいて損はないかなと…。
今回少しでも理解しやすく噛み砕いて要点のみを紹介したつもりでしたが、もし至らない点などありましたらコメントいただけたら嬉しいです。
次回はこのn進数を使った計算方法について説明していきたいと思いますのでよろしくお願いいたします。
では!!