k-tokitoh

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

2019-09-28

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

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 進数として解釈する。