他カテゴリ

基本情報技術者試験のお勉強 ~n進数➀

nonstop-iida's icon'
  • nonstop-iida
  • 2020/02/29 15:14

突然ですが、基本情報技術者試験を受けようかと思ってます。

正直、Pythonのモジュールを使えば、あまり難しいこと考えずに色々できてしまいますが、「なんでそうなのか?どういう原理なのか?」ってちゃんと理解したい。

というのが動機です。

そこで、自分が勉強した内容をPythonでコードで表現してみて、理解を深め、その内容を記事にも書いていこうと思いました。

需要の有無は不明ですが・・・(笑)

んなこと知ってるわって方も多数だと思うので、生暖かい目でそっとしていただけると幸いです。

1.n進数とは

コンピューターは2進数(1か0)で、動いています。

1か0だけだと、できることは限られそうですが、これを組み合わせることで表現しているわけです。

僕たちが普段目にしているのは10進数です。

1桁に0~9までの数字があり、10となると1桁繰り上がります。

2進数は、1桁に0~1までの数字のみとなっていて、2になると1桁繰り上がるわけです。

例えば、128という10進数について、考えてみましょう。

Content image
図1

2.コンピューターの最小計算単位(ビット)

2進数の1・0で表せるのが、コンピュータにおける最小単位となり、これを「1ビット」と言います。

ちなみに、「1バイト」で「1バイト=8ビット」となっています。

なぜ1バイトが8ビットかというと、半角英数字は8ビットで表現できるためです。

例えば、大文字のAは’01000001’、小文字のaは’01100001’となります。

ちなみに1バイト(8ビット)の最大値は「11111111」となります。

これは、2の7乗+2の6乗+2の5乗+2の4乗+2の3乗+2の2乗+2の1乗+2の0乗となり、255となります。'00000000'も含めると、256通り表現できるため25文字しかないアルファベットであれば大文字・小文字・記号・数字(0~9)等を含めても表現可能なわけです。

(日本語の場合は、文字数が多いため「2バイト=16ビット」が必要となります。

3.8進数・16進数について

2進数で1文字を表そうとすると、8ビットも必要になります。

例えば、8進数だと0~7を1桁で表します。16進数の場合は10以上の数はアルファベットA~Fとし、1桁で0~15を表します。

分かりづらいので、図で示すと・・・

Content image
図2

ちなみに、昔のコンピューターは3の倍数ビット(12ビットや24ビット)だったので、

3ビット毎にまとめられる8進数は丁度良かったとのこと。

なお、現在は4の倍数ビット(32ビットや64ビット)のコンピューターが主流なので、4ビット毎にまとめられる16進数が便利な訳です。これも図にすると・・・

Content image
図3

こういうことですね!

ちなみに余談ですが、1KBは1,000B(正確に言うと1,024バイト(8,192ビット))

1MBは1,000KB(正確に言うと1,024キロバイト(1,048,576バイト))となってます。

何で実際1,024バイトや1,048,576かというと、上の話同様コンピューターは2進数ベースなので、2の10乗が1,024、2の20乗が1,048,576だからなんですね。

4.Pythonで2進数・8進数・16進数を求めるプログラムを書いてみる

やっと本題です。

どうも書き始めると気分が乗って長くなってしまう・・・。

まずは10進数から2進数を求める関数を作ってみます。

先ほどから見てきた通り、1桁左に行くにつれて2の階乗数が増えます。

逆を言うと、2で1か0になるまで割っていき、余りがあれば1を、なければ0を置いけば2進数はできあがります。

こういうことです。

Content image
図4

念のため、検証してみましょう。

Content image
図5

合ってますね。

これでもう分かった方もいると思いますが、商が1か0になるまで、商に対して割り残をしながら、余り1もしくは0を拾っていけばいいことになるわけです。

プログラムは以下のとおりです。

引数に10進数(変数n10)をとって、2で割った商をn10に代入しながら、余り1もしくは0をn2_listに格納していきます。

(商が1となった場合はそこで打ち切り、リストに最後に1を加えます。)

図5の通り、下から上に並べる必要があるので、リストをreverse関数で逆順に並び替えして、join関数を使って文字列にしてresult変数に格納し、返り値を出力しています。

上記関数が記載されたファイルを、コマンドプロンプトで呼び出し適当な10進数を引数として実行すると、2進数で出力がされます。

Content image

無事出力されました。

おまけで、8進数と16進数のコードも書いたので載せておきます。

8進数は2進数とあまり変わりませんが、16進数の場合は15までの数を定義する必要があるのでn16_numというリストを用意し、何番目の要素かを指定するように作りました。

↓10進数を8進数に変換するコード

↓10進数を16進数に変換するコード

実行の仕方は同じです。

Content image

最後まで読んでいただき大変ありがとうございました!

 

 

 

 

 

 

 

Supporter profile icon
Article tip 1人がサポートしています
獲得ALIS: Article like 127.40 ALIS Article tip 0.10 ALIS
nonstop-iida's icon'
  • nonstop-iida
  • @nonstop-iida
ノンストップ飯田と申します。会社員ですが、趣味でやってるPythonと歌うのが好きです。曲も書きます。twitter:@nonstop_iida

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
トラベル

わら人形を釘で打ち呪う 丑の刻参りは今も存在するのか? 京都最恐の貴船神社奥宮を調べた

Like token Tip token
486.35 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
他カテゴリ

テレビ番組で登録商標が「言えない」のか考察してみる

Like token Tip token
26.20 ALIS
Eye catch
ビジネス

海外企業と契約するフリーランス広報になった経緯をセルフインタビューで明かす!

Like token Tip token
16.10 ALIS
Eye catch
トラベル

無料案内所という職業

Like token Tip token
84.20 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
他カテゴリ

オランダ人が語る大麻大国のオランダ

Like token Tip token
46.20 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
グルメ

バターをつくってみた

Like token Tip token
127.90 ALIS
Eye catch
他カテゴリ

SASUKEオーディションに出た時の話

Like token Tip token
35.87 ALIS