コンテンツにスキップ

n進数の操作

基数指示子

基数指示子を先頭につけると、それぞれ 10 進法以外の記数法で整数値を書くことができる。
ただし、実行時は 10 進数に変換されて表示される。

# 2進数
p 0b11111111  # => 255

# 8進数
p 0377        # => 255 (一般的な書き方)
p 0o377       # => 255 (通常は使用しない)

# 10進数
p 0d255       # => 255 (通常は使用しない)

# 16進数
p 0xff        # => 255

文字列 -> 数値変換

String#to_i

  • 文字列を 10 進数表現された整数であると解釈して、整数に変換する。
  • 整数とみなせない文字がある場合はそこまでを変換対象とする。
  • 変換対象が空文字、 nil の場合は 0 を返す。
p "10".to_i     # => 10
p "010".to_i    # => 10

p "0x11".to_i   # => 0
p "".to_i       # => 0
p nil.to_i      # => 0
  • to_i(n) のように引数に基数を指定できる。(= n 進数への変換)
  • n には 0, 2 ~ 36 の整数を指定できる。
  • n0 を指定した場合は、変換対象の接頭辞から基数を判定する。
# 2進数
p "01".to_i(2)          # => 1
p "0b1".to_i(2)         # => 1
p "0b11111111".to_i(0)  # => 255

# 8進数
p "07".to_i(8)          # => 7
p "0o7".to_i(8)         # => 7
p "0377".to_i(0)        # => 255
p "0o377".to_i(0)       # => 255

# 10進数
p "09".to_i(10)         # => 9
p "0o9".to_i(10)        # => 9
p "0d255".to_i(0)       # => 255

# 16進数
p "0f".to_i(16)         # => 15
p "0xf".to_i(16)        # => 15
p "0xff".to_i(0)        # => 255

String#hex

  • 文字列を 16 進数で数値が表現されていると解釈して整数に変換する。
  • 接頭辞 0x, 0X および _ は無視される。
p "10".hex      # => 16
p "ff".hex      # => 255
p "0x10".hex    # => 16
p "-0x10".hex   # => -16
p "1_0".hex     # => 16
p "".hex        # => 0
  • 文字列が [_0-9a-fA-F] 以外を含む時はその文字以降を無視する
p "xyz".hex     # => 0
p "10z".hex     # => 16

String#oct

  • 文字列を 8 進数で数値が表現されていると解釈して、整数に変換する。
p "10".oct        # => 8
p "010".oct       # => 8
p "8".oct         # => 0
p "-010".oct      # => -8
p "1_0_1".oct     # => 65
  • 接頭辞 (0, 0b, 0B, 0x, 0X) に応じて 8 進数以外も変換する。
p "10".oct        # => 8
p "010".oct       # => 8
p "0b10".oct      # => 2
p "0x10".oct      # => 16
p "-0b10".oct     # => -2
p "-0x10".oct     # => -16
  • 文字列が [_0-9a-fA-F] 以外を含む時はその文字以降を無視する
p "xyz".oct   # => 0
p "10z".oct   # => 8

注意

  • String#binary は存在しない。