Простой ответ: это потому, что 0a
или a
в Шестнадцатеричный равен 10
в Десятичный .
И base
вдругое слово Radix означает количество уникальных цифр в системе счисления.
В десятичном формате мы имеем от 0
до 9
, 10 цифр для представления чисел.
В шестнадцатеричном форматевместо этого мы имеем 16 цифр, кроме 0
до 9
, мы используем a
до f
для представления концептуальных чисел от 10
до 15
.
Вы можете проверить это следующим образом:
"a".to_i(16)
#=> 10
"b".to_i(16)
#=> 11
"f".to_i(16)
#=> 15
"g".to_i(16)
#=> 0 # Because it's not a correct hexadecimal digit/number.
'2c'.to_i(16)
#=> 44
'2CH2'.to_i(16)
#=> 44 # Extraneous characters past the end of a valid number are ignored, and it's case insensitive.
9.to_s.to_i(16)
#=> 9
10.to_s.to_i(16)
#=> 16
Другими словами, 10
в десятичном формате равен a
в шестнадцатеричном.
И 10
в шестнадцатеричном являетсяравно 16
в десятичном виде.(Документ для to_i )
Обратите внимание, что обычно мы используем 0x
перед шестнадцатеричными числами:
"0xa".to_i(16)
#=> 10
"0x100".to_i(16)
#=> 256
Кстати, вы можете просто использовать эти представления в Ruby:
num_hex = 0x100
#=> 256
num_bin = 0b100
#=> 4
num_oct = 0o100
#=> 64
num_dec = 0d100
#=> 100
He x в десятичных, b inary, o ctonary, d ecimal (этот, 0d
излишне, конечно, просто используйте в некоторых случаях для разъяснения.)