Ruby技術者認定試験によく出てくる進数問題をここでまとめてメモしておきます。
10進数 | 2進数 | 16進数 | 8進数 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 8 | 10 |
9 | 1001 | 9 | 11 |
10 | 1010 | A | 12 |
11 | 1011 | B | 13 |
12 | 1100 | C | 14 |
13 | 1101 | D | 15 |
14 | 1110 | E | 16 |
15 | 1111 | F | 17 |
16 | 10000 | 10 | 20 |
hexメソッドは、文字列を16進数の表現と見なして整数に変換します。文字列の先頭には"0x"が付いていてもいなくてもかまいません。 文字列の先頭から16進数と見なせる部分を切り取って変換します。16進数と見なせる部分がなければ0を返します。
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メソッドは、文字列を8進数の表現と見なして整数に変換します。文字列の先頭には、“0"や"0o"が付いていてもいなくてもかまいません。 文字列の先頭から8進数と見なせる部分を切り取って変換します。8進数と見なせる部分がなければ0を返します。
完全に自分用のメモ。
普段から使っているから分かってると思って、読み飛ばすことが多いがココを理解してないといけない。
1504を例に考えていきます。
図解にしてみます。
この10のことを10進数の基数
または底
と言います。右肩に乗っているの数字は指数
です。
2進法で数を順に数えると、まず0、そして1、次は2••••ではなく、1繰り上がって10になり、さらに11、100、101と続きます。
2進数の1100を例に考えていきます。
「8の個数」を2³
と表現し、「4の個数」を2²
と表現し、「2の個数」を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進数に変換する時は、こうです。
8進数とは、数値の表現形式のうち、「0」から「7」までの8種類の数字を使って数値を表現する形式のこと。
8進数の371を例に考えていきます。
なので、8進数の371を10進数に変換するとこうなります。
3 × 8² + 7 × 8¹ + 1 × 8⁰ = 3 × 64 + 7 × 8 + 1 × 1
= 192 + 56 + 1
= 249
16進数とは、0から9までの10個の数字と、AからFまでの6個のアルファベットを使って数値を表現する形式のこと。
16進数の3F7Bを例に考えていきます。
なので、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
文系出身にはちょっと辛い。参考にしたのは以下の本です。買っといて損はないと思います。