search
他カテゴリ

基本情報技術者試験のお勉強 ~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
Article registration Article registration
nonstop-iida's icon'
  • nonstop-iida
  • @nonstop-iida
ノンストップ飯田と申します。会社員ですが、趣味でやってるPythonと歌うのが好きです。曲も書きます。twitter:@nonstop_iida

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

kaya 2021/10/06
Like token Tip token
61.20 ALIS
Eye catch
他カテゴリ

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

nonstop-iida 2020/03/04
Like token Tip token
124.82 ALIS
Eye catch
トラベル

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

こすもす 2021/08/07
Like token Tip token
486.35 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

CryptoChick 2020/03/07
Like token Tip token
159.32 ALIS
Eye catch
他カテゴリ

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

ふたひい@web3 2020/05/16
Like token Tip token
114.82 ALIS
Eye catch
他カテゴリ

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

連獅子 2021/10/09
Like token Tip token
26.20 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

暗号資産ジョシ校生 蟻巣 2021/07/07
Like token Tip token
6.32 ALIS
Eye catch
グルメ

バターをつくってみた

モミジ 2021/02/18
Like token Tip token
127.90 ALIS
Eye catch
トラベル

梅雨の京都八瀬・瑠璃光院はしっとり濃い新緑の世界

こすもす 2021/05/25
Like token Tip token
216.64 ALIS
Eye catch
クリプト

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

otakucoin 2021/03/29
Like token Tip token
121.79 ALIS
Eye catch
トラベル

無料案内所という職業

bansu 2019/06/11
Like token Tip token
84.20 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

昆布森ちゃん 2021/01/19
Like token Tip token
38.31 ALIS