2019-09-28
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.)
- 数字区切りとしてのアンダーバー
- (ex.)
'1_0_'.hex # => 16
- (ex.)
- 接頭辞
- 16 進数でない文字: その文字以降は 16 進数として認識されない。
- (ex.)
'10g1'.hex # => 16
- (ex.)
'g'.hex # => 0
- (ex.)
'_10'.hex # => 0
- (ex.)
'1__0'.hex # => 1
- (ex.)
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 進数として解釈する。