JKのたまり場(情強のたまり場)

「情報強者」略して「情強」略して「JK」を目指すためのサイト。プログラミング関連情報多め。

JKでも分かるデータ指向なプログラミング入門 第1回 自然数

最終更新日時


第1回はプログラムにおいてデータを表現する方法について解説します。特に自然数を表現する方法について解説します。

自然数とは012・・・というような数です。

1 10進数

自然数をプログラムにおいて表現する方法には幾つかあるのですが、最も分かりやすいのは10進数かと思います。

10進数による自然数の表現は私たちが普段使っている数値の表現と全く同じです。

つまり、プログラムにおいても自然数は012・・・と表現することができます。

たとえば、8という自然数はプログラムにおいても8とそのまま表現することができますし、111という自然数も111とそのまま表現することができます。

ですから、新しく覚えることは何もありません。

ただいつものように表現すれば良いだけです。

図にすると下のようになります。

4 3 2 1 0 5 6 7 8 9
図1. 10進数の表現方法

* ちなみに、このような図をrailroad diagramと言います。

ただ1点だけ細かい点について書いておくと、たとえば、101001などは全て同じ自然数を表します。しかし、基本的には省略できる冒頭の0は省略すべきです。ですから、たとえば、1という自然数は普通は1としか表現せず、01001などと表現することはありません。

それから、プログラムにおいて表現することのできる自然数には上限があることがありますので注意してください。上限があるかどうかや上限が具体的にどの自然数なのかはプログラミング言語によります。JavaScriptの場合、基本的に9007199254740992までの自然数しか表現することはできません

ちなみに、10進数が10進数と呼ばれているのは10進数では数値を表現するのに0から9までの10個の数字を使っているからです。

ランダム練習問題1

厳密には9007199254740992より大きな自然数を表現することが完全に不可能な訳ではありません。しかし、単純に私たちが普段使っている数値の表現と全く同じ方法で表現することはできません。別の方法で表現する必要があります。

2 16進数

10進数は私たちが普段使っている数値の表現方法と全く同じでしたが、プログラムにおいても非常によく使われる表現方法です。

しかし、プログラムにおいては10進数以外にも幾つか別の数値の表現方法が使われます。

その中で最もよく使われているのは16進数かと思います。

10進数は数値を表現するのに0から9までの10個の数字を使っているから10進数と呼ばれているのでした。

ということは、16進数は数値を表現するのに16個の数字を使うのではないかとも思われます。

実際そうです。

16進数では数値を表現するのに16個の数字を使います

しかし、私たちが普段使っている数字というのは0から9までの10個しかありません。

これでは6個足りません。

どうしているのでしょうか?

実は、16進数では数値を表現するのに0から9までの10個の数字以外にABCDEFの6個の文字を数字として使用します

9の次の数字がAで、Aの次の数字がBで、Bの次の数字がCで、Cの次の数字がDで、Dの次の数字がEで、Eの次の数字がFです。

ただし、大文字のABCDEFの代わりに小文字のabcdefを使用することもできます。

また、16進数の冒頭には0X0xを付加しなければなりません

これにより、10進数と16進数を明確に区別することができます

ですから、10進数では9の次の自然数は10ですが、16進数では0XA0Xa0xA0xaとなります。

10進数で11は16進数では0XB0Xbなどです。120XC0Xcなどです。130XD0Xdなどです。140XE0Xeなどです。150XF0Xfなどです。

そして、10進数での16は16進数では0X100x10となります。

これは16進数ではFが一番大きな数字ですので、0XFの次の自然数は桁が1つ増えることになるからです。結果として1桁目が0に戻り、2桁目が1となります。つまり、0X100x10となります。

この先の自然数も無限に同じように表現していくことができます

16進数の表現方法を図にすると下のようになります。

0X 0x A 9 8 7 6 5 4 3 2 1 0 B C D E F a b c d e f
図2. 16進数の表現方法

とは言え、§1でも書きましたが、プログラムにおいて表現することのできる自然数にはプログラミング言語によっては上限があることがあります。

3 10進数から16進数への変換

10進数と16進数について説明しましたが、10進数で表現された自然数を16進数での表現に書き換えるにはどうすれば良いでしょうか?

これには簡単な方法があります。

たとえば、453の場合を考えてみましょう。

16進数での表現を求めるには16進数での表現のそれぞれの桁を1つずつ小さいものから順番に求めていくことになります。

ですから、まず、1桁目から始めます。

45316で割った余りを求めます。答えは5となります。そして、この5こそが正に1桁目の数字となります。

45316で割ったを求めます。答えは28となります。そして、この28が2桁目の数字を求める際に使う数となります。

次に、2桁目に進みます。

2桁目の数字を求めるには元の453ではなく直前の手順で求まった28に対して1桁目の場合と同じ計算を行います。

2816で割った余りを求めます。答えは12です。そして、この12こそが正に2桁目の数字ということになるのですが、今は16進数での表現を求めようとしているのでした。ですから、数字も16進数における数字を使っていかなければなりません§2書いたように、10進数での12は16進数では0XC0Xcなどとなるのでした。ですから、結局、2桁目の数字はCcということになります。

2816で割った商を求めます。答えは1です。ですから、3桁目の数字を求めるには1に対して1桁目や2桁目の場合と同じ計算を行うことになります。

次に、3桁目に進みます。

116で割った余りを求めます。答えは1です。ですから、3桁目の数字は1となります。

116で割った商を求めます。答えは0です。商が0になりましたからこれで計算は終わりです。そのため、4桁目以降の数字はありません。

ということで、1桁目は5、2桁目はCc、3桁目は1となりました。

ですから、10進数での453は16進数では0X1C50X1c5などになるということです。

このような手順で計算すれば10進数で表現された自然数はどのようなものでも16進数での表現に書き換えることができます||

ランダム練習問題2

|| ちなみに、これとは逆に、16進数で表現された自然数を10進数での表現に書き換えるにはこれとは全く逆の計算をすれば良いです。

4 8進数

プログラムにおいて10進数や16進数以外で使われることのある数値の表現方法としては8進数があります。

もうお分かりかもしれませんが、8進数では数値を表現するのに8個の数字を使います

そして、その8個の数字というのは0から7までの8個の数字です。

また、8進数の冒頭には0O0oを付加しなければなりません

これにより、10進数と8進数を明確に区別することができます

8個の数字しか使わないという点と冒頭に0O0oを付加しなければならないという点以外は10進数や16進数と同じです。

8進数の表現方法を図にすると下のようになります。

0O 0o 3 2 1 0 4 5 6 7
図3. 8進数の表現方法

5 10進数から8進数への変換

10進数で表現された自然数を8進数での表現に書き換えるにも16進数の場合と同様に考えれば問題ありません。

つまり、16で割った余りや商を求める代わりに8で割った余りや商を求めるようにします。

ランダム練習問題3

6 2進数

プログラムにおいて使われることのある数値の表現方法としては他に2進数があります。

もうお分かりかもしれませんが、2進数では数値を表現するのに2個の数字しか使いません

そして、その2個の数字というのは01です。

また、2進数の冒頭には0B0bを付加しなければなりません

これにより、10進数と2進数を明確に区別することができます

2個の数字しか使わないという点と冒頭に0B0bを付加しなければならないという点以外は10進数や16進数や8進数と同じです。

2進数の表現方法を図にすると下のようになります。

0B 0b 0 1
図4. 2進数の表現方法

7 10進数から2進数への変換

10進数で表現された自然数を2進数での表現に書き換えるにも16進数や8進数の場合と同様に考えれば問題ありません。

つまり、168で割った余りや商を求める代わりに2で割った余りや商を求めるようにします。

ランダム練習問題4

pizyumi

プログラミング歴20年のプログラマ兼投資家兼経営者。

最近は様々な投資の傍らウェブ関係の仕事もしています。

スポンサーリンク

更新履歴

作成
自然数の定義を修正

スポンサーリンク

JKでも分かるデータ指向なプログラミング入門

直前の記事
第0回 はじめに
現在の記事
第1回 自然数
直後の記事
第2回 整数

スポンサーリンク

新規記事

アーカイブ

スポンサーリンク