X進数の数値リテラルほか

リファレンスのなぞり書き。

X進数の数値リテラル

接頭辞をつけることで10進数以外の表記でリテラルを記述できる。 接頭辞と整合的でない入力が続いた場合はエラーを返す。

16進数 => 接頭辞0x

0x10  # => 16
0x1g  # => SyntaxError

2進数 => 接頭辞0b

0b10  # => 2
0b12  # => SyntaxError

8進数 => 接頭辞0o or 0

0o10  # => 8
0o19  # => SyntaxError
010  # => 8
019  # => SyntaxError

String#hex

レシーバを16進数表記とみなして、相当する値をintegerで返す。

'10'.hex  # => 16

16進数として認識できる文字がない場合は0を返す。

''.hex  # => 0

レシーバに含まれる文字は以下のいずれかとして解釈される。

  • 16進数の数値部分: [0-9a-fA-F]
  • 16進数の数値以外の部分: 戻り値に影響しない。
    • 接頭辞0x
      • (ex.)'0x10'.hex # => 16
    • 数字区切りとしてのアンダーバー
      • (ex.)'1_0_'.hex # => 16
  • 16進数でない文字: その文字以降は16進数として認識されない。
    • (ex.)'10g1'.hex # => 16
    • (ex.)'g'.hex # => 0
    • (ex.)'_10'.hex # => 0
    • (ex.)'1__0'.hex # => 1

String#oct

String#hexの8進数版。

String#to_i

String#to_i(base = 10) -> Integer

  • 引数baseを基数とする数値表現としてレシーバを解釈して、数値を返す。
  • String#hexはString#to_i(8)と同じ。
  • baseを0と指定するとprefixから基数を判断する。prefixがない場合は10進数として解釈する。