shou.com
JP / EN

Rubyの進数とかをまとめる

Sat Feb 10, 2018
Sat Jun 23, 2018

Ruby技術者認定試験によく出てくる進数問題をここでまとめてメモしておきます。

10進数、2進数、16進数、8進数の表

10進数2進数16進数8進数
0000
1111
21022
31133
410044
510155
611066
711177
81000810
91001911
101010A12
111011B13
121100C14
131101D15
141110E16
151111F17
16100001020

よく出てくるメソッド

hexメソッド

hexメソッドは、文字列を16進数の表現と見なして整数に変換します。文字列の先頭には"0x"が付いていてもいなくてもかまいません。 文字列の先頭から16進数と見なせる部分を切り取って変換します。16進数と見なせる部分がなければ0を返します。

to_iメソッド

to_iメソッドは、文字列を10進数の表現と見なして整数に変換します。 文字列の先頭から10進数と見なせる部分を切り取って変換します。見なせる部分がなければ0を返します。

デフォルトは10進数。引数を指定すれば10進数以外に2〜36進数表現変換できます。 baseに0を指定するとプリフィクス(接頭語)から引数を判断します。

0b(2進数)、0(8進数)、0o(8進数)、0d(10進数)、0x(16進数)。

baseとは、進数を指定する整数。0か2〜36の整数。0とすると10進数になり、負の値を指定すると例外ArgumentErrorが発生します。

octメソッド

octメソッドは、文字列を8進数の表現と見なして整数に変換します。文字列の先頭には、“0"や"0o"が付いていてもいなくてもかまいません。 文字列の先頭から8進数と見なせる部分を切り取って変換します。8進数と見なせる部分がなければ0を返します。

進数の計算方法

完全に自分用のメモ。

10進数とは

普段から使っているから分かってると思って、読み飛ばすことが多いがココを理解してないといけない。

1504を例に考えていきます。

  • 1は「1000の個数」を表しています
  • 5は「100の個数」を表しています
  • 0は「10の個数」を表しています
  • 4は「1の個数」を表しています

図解にしてみます。

rubyの進数とかをまとめる

この10のことを10進数の基数またはと言います。右肩に乗っているの数字は指数です。

rubyの進数とかをまとめる

2進数とは

  • 0と1の2種類だけ
  • 右から順に、1の位、2の位、4の位、8の位•••を表します。要は、n桁目が2のn-1乗の位になります。

2進法で数を順に数えると、まず0、そして1、次は2••••ではなく、1繰り上がって10になり、さらに11、100、101と続きます。

2進数の1100を例に考えていきます。

  • 1は「8の個数」を表しています ← 4桁目なので、2³ = 8
  • 1は「4の個数」を表しています ← 3桁目なので、2² = 4
  • 0は「2の個数」を表しています ← 2桁目なので、2¹ = 2
  • 0は「1の個数」を表しています ← 1桁目なので、2⁰ = 1

「8の個数」をと表現し、「4の個数」をと表現し、「2の個数」をと表現し、「1の個数」を2⁰ と表現しているわけです。

なので、2進数の1100を10進数に変換するとこうなります。

1 × 2³ + 1 × 2² + 0 × 2¹ + 0 × 2⁰ = 1 × 8 + 1 × 4 + 0 × 2 + 0 × 1
                                  = 8 + 4 + 0 + 0
                                  = 12

よく見るやつですが、10進数の12を2進数に変換する時は、こうです。

rubyの進数とかをまとめる

8進数とは

8進数とは、数値の表現形式のうち、「0」から「7」までの8種類の数字を使って数値を表現する形式のこと。

8進数の371を例に考えていきます。

  • 3は「64の個数」を表しています ← 3桁目なので、8² = 64
  • 7は「8の個数」を表しています ← 2桁目なので、8¹ = 8
  • 1は「1の個数」を表しています ← 1桁目なので、8⁰ = 1

なので、8進数の371を10進数に変換するとこうなります。

3 × 8² + 7 × 8¹ + 1 × 8⁰ = 3 × 64 + 7 × 8 + 1 × 1
                                  = 192 + 56 + 1
                                  = 249

16進数とは

16進数とは、0から9までの10個の数字と、AからFまでの6個のアルファベットを使って数値を表現する形式のこと。

16進数の3F7Bを例に考えていきます。

  • 3は「4096の個数」を表しています ← 4桁目なので、16³ = 4096
  • Fは「256の個数」を表しています ← 3桁目なので、16² = 256
  • 7は「16の個数」を表しています ← 2桁目なので、16¹ = 16
  • Bは「1の個数」を表しています ← 1桁目なので、16⁰ = 1

なので、8進数の371を10進数に変換するとこうなります。

3 × 16³ + F(15) × 16² + 7 × 16¹ + B(11) × 16⁰ = 3 × 4096 + 15 × 256 + 7 × 16 + 11 × 1
                                              = 12288 + 3840 + 112 + 11
                                              = 16251

文系出身にはちょっと辛い。参考にしたのは以下の本です。買っといて損はないと思います。

プログラマの数学第2版

See Also