他カテゴリ

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

nonstop-iida's icon'
  • nonstop-iida
  • 2020/03/01 05:34
Content image

 

さて、昨日に引き続きほぼ自分向けのアウトプットです。笑

3人も、「いいね」(?)をいただいたようで、ありがとうございます。

今日はPythonで簡単に10進数→n進数に変換をする方法と、n進数における符号の表し方・補数について書いていきたいと思います。

1.Pythonで10進数をn進数に変換する方法

え?昨日関数作っていたじゃん?って話ですが、実はPythonにはいとも簡単にn進数に変換可能なコードがあるのですwww

でも、まずは原理を理解しないとってことで学ぶために自分で昨日のコードを書いたんですね~。意外と「まじめ」ですね、飯田さん。

では、10進数から2進数・8進数・16進数への変換について、以下に表します。

1行で良いんですよね(笑)

実際に実行すると・・・

Content image
たった一行で・・・

となります。昨日のコードで求めた結果と同じですね。

頭についている'0b'は2進数であることを示していて、2進数の英語「binary」の頭文字です。ちなみに、8進数は「octal」、16進数は「hexadecimal」です。

では、ついでにn進数から10進数に変換する方法も見ていきましょう。

10進数への変換は昨日も書いた通り、以下のように桁毎の重みを足し合わせる感じですね。

Content image
桁毎の重み(2進数なら左にずれるごとに×2)を足し合わせる

では、これをPythonで簡単に書くと・・・

たったこれだけです。

では、16進数で実験してみると・・・

Content image

 

大丈夫ですね。

 

では、次に再びPythonのコードを離れて、正負の数をn進数で表す方法について見ていきましょう。

2.n進数で正負を表す方法

10進数に符号をつける場合は、+181や-181といったように、先頭に「+」か「-」をつけて表しますよね。

しかし、コンピューター内の計算において「+」や「-」は利用できません。

そこで、符号ビットといい、符号を表す桁を1つ使うのです。

プラスの場合は「0」、マイナスの場合は「1」でこれを表します。

前回ご説明した通り、例えば1バイト(8ビット)で数字を表す場合、左端の1ビットを「符号ビット」にして、残りの7ビットで数字を表します。

Content image
同じ2進数10000001なのに、符号なしかありで表している数が異なる

ふーん、くらいに思った方はそのままでもいいですが、ちょっとこんがらがってしまいますよね。疑問としては、何故同じ2進数なのに「符号あり」か「符号なし」で表す数が違うのか?コンピューターはどのように、「符号あり」か「符号なし」を見分けるのか???

まず、8ビット中の1桁を符号に使ってしまっているので、「符号あり」の場合、当然表せる範囲が変わってきます。

「符号なし」の場合、8ビットで0~255を表せますが、「符号あり」の場合、数字部分は7ビットとなるため、‐128~127までの256個しか表せなくなります。

次に、負の2進数については、マイナスを使わずに引き算を行うために「2の補数」のが必要となってきます。

3.2の補数とは?

補数についてちゃんと書くとめちゃくちゃ長くなってしまうので、2の補数が必要となる理由についてポイントを絞ってしっかり書こうと思います。

まず、補数とは何かですが・・・

補数(ほすう、complement)とは、ある基数法において、ある自然数 a に足したとき桁が1つ上がる(桁が1つ増える)数のうち最も小さい数をいう。応用の一例としては、計算機械において、「ある数から、xを引く」という操作を、加算する機械(加算器)で「ある数にxの補数を足す(ただし最も上の桁からの繰り上がりを無視する)」という操作でおこなうことができる、というものがある。

『ウィキペディア(Wikipedia)補数より』

じゃあ基数法って何???とかなっちゃいますよね(笑)

簡単に言うと、ある数に足したときに桁が1つ上がる最小の数が補数です。

例えば、10進数で考えた場合に桁があがる最小は10のべき乗です。

以下に何個か例を挙げてみます。

Content image

 

まだここまででピンと来た人もいるかもしれません。

実は補数というのは、「引き算」を「足し算」で表すことができるようになるのです。まずは分かりやすく、10進数を使って、800‐567を考えてみましょう。

Content image

結論から言うと、2の補数に符号ビット「1」を付けたものが負の2進数となります。

では2進数の計算を見てましょう。

Content image

どうでしょうか? 引き算を足し算で表現するために、2の補数を使ってコンピューター上では計算しているということを理解しました。(私が)

浮動小数点についても、書こうと思ってましたが、ちょっと疲れてしまったので(笑)、それは次回にします。

 

 

 

 

 

 

 

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

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

無料案内所という職業

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

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

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

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

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

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

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

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

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

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

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

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

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

京都のきーひん、神戸のこーへん

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

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

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

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

Like token Tip token
216.64 ALIS
Eye catch
グルメ

バターをつくってみた

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

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS