2016年9月10日土曜日

r進数

前記事の「Bloggerで数式表示」で書きましたが、2016年10月の応用情報処理技術者試験を職場の友人にたぶらかされて受験することになってしまいました。

基本情報処理技術者試験はだいぶ前に取ったのですが、私の本職はプログラマでもないので特にそれ以上取ろうという気もあまりなかったのですが・・・・

私の経験上、こういう系統の試験は勉強した端から忘れてしまうので、書き留めながら勉強するという意味と、落ちて次回受ける時(受かりたいですが・・・)にまた一からやり直しにならないように備忘録的に書き込んでいきたいと思います。

今回はr進数です。

<記事ここから>
買った参考書が難しすぎるのか、僕の理解力が少ないのかはわからないですが、精読しないと訳がわからないことが多すぎるのがこの手の試験参考書だったりします。

例えば・・・
「有限個の記号を使って無限個のものを識別しようと考えられたのが10進数に代表されるr進法です。r進法では、0~(r-1)までのr個の数字をある規則に従って並べることで無限の数を表すことができます。」
みたいな感じです。

上の内容を僕なりに解釈すると
「10進数が世の中では一般的に使われているが、別にそれにとらわれずr個の記号で数を表すことができる。例えば
10進数は『0,1,2,3,4,5,6,7,8,9』の10個の記号を使って数を表すことができるが、別にそれにとらわれることなく『a,b,c』の3つの記号を使ったって構わない。
ちなみに上の三つの記号を使って0~9の数字を表すと

a, b, c, aa, ab, ac, ba, bb, bc

と表すことができる」

簡単になっているのか・・・・?(ノД`)・゜・。

ここで、上の例でいう「abc」を基数(radix)と、言うそうな

で、10進数Nを「a」を基数とするr進数で表現すると

<この記事で覚えるべき内容1>
N(10) = am×$r^m$+am-1×$r^{m-1}$+・・・+a1×$r^1$+a0×$r^0$+a-1×$r^{-1}$+・・・+a-m×$r^{-m}$

と表現できる・・・のだそうだ・・・長い・・・

まあ、つまり各桁の数字(r)を各桁の重み(累乗)で掛けて足すとわかる・・・とこのようなことらしい。

ここで、上の知識で解ける過去問を一つ


上の問題を逆に解釈すると、2進数の有限小数表現ができる、つまり2進数で表しても無限に終わらないようにならない奴を除外すれば良いので

$2^0=1$
$2^{-1}=0.5$
$2^{-2}=0.25$
$2^{-3}=0.125$

なので、
ア. $0.375=0.25+0.125=2^{-2}+2^{-3}$ で表現可能
イ. $0.45=0.25+0.2$ で「0.2」は表現できなそう・・・
ウ. $0.625=0.5+0.125=2^{-1}+2^{-3}$ で表現可能
エ. $0.75=0.5+0.25=2^{-1}+2^{-2}$ で表現可能

つまり答えはイ.となる。


ここで参考書は16進数の元の数字を16倍すると桁上がりすると突拍子もなく言ってくる。つまり・・・

<この記事で覚えるべき内容2>
16進数の 「$6B.5$」 を16倍すると 「$6B5$」 と小数点が右に一個ずれる
2進数の 「$1011.11$」 を2倍すると 「$10111.1$」 となる、とこう言うことだそうな。
これは当たり前のようにも見えるが、おそらくこれを必要とするような問題が出てくるんだろうな・・・

<この記事で覚えるべき内容3>
10進数をr進数に直す方法は以下のような方法だそうな・・・

例えば10進数「603」を16進数に直すには

16 ) 603

16 )  37 ・・・余り11

16 )   2 ・・・余り5

         0 ・・・余り2

余りを下から並べると、「$25B$」となる。これは別に8進数であろうが4進数だろうが同じらしい。
しかし・・・なぜだろう・・・ 気になると放置できん・・・

逆に10進数に戻してみよう・・・

16進数の「$25B$」は、
$2*16^2+5*16^1+11*16^0=2*256+5*16+11=512+80+11=603$

あ・・・つまり10進数に戻す方法を逆にしてるのか・・・って当たり前かww

この内容で解ける問題を・・・

26 ) 123

26 )    4 ・・・余り19

           0 ・・・余り4

4は「E」、19は「T」になるので、答えは「ET」のエ.となる。

<この記事で覚えるべき内容4>
10進数をr進数に変換する時、小数部分の計算は<内容3>とは逆に掛けていけ・・・だと・・・?

少数「0.75」を2進数に変換
$0.75*2=1.5$ ・・・この繰り上がった1が小数点以下1桁目、まだ少数になっている0.5を
$0.5*2=1.0$ ・・・繰り上がった1が小数点以下2桁目で、2進数表記の「0.75」は

$0.11$

となる。

16進数に変換したとすると・・・・
$0.75*16=12.0$ つまり「0.C」で表される・・・だとぅ・・・・?

「1」を「16」で割ると「0.0625」で、「12」をかけると・・・「0.75」 おぉ・・・( ゚Д゚)

今日はこの辺にしておいてやる・・・( ゚Д゚) ・・・あれ・・・なんかまだ書いてある (ノД`)・゜・。

<この記事で覚えるべき内容5>
「(3n+1)進数で表された3の倍数の各桁の総和は3の倍数になる」
うるせぇっ 丸覚えしてやる (ノД`)・゜・。

今日はこの辺で・・・
この調子で試験に間に合うのか??

0 件のコメント:

コメントを投稿