Почему `" 0a ".to_i (16)` возвращает `10`? - PullRequest
0 голосов
/ 07 февраля 2019

Я запутался в необязательном аргументе для to_i.В частности, что означает «базовый» и как он влияет на метод в этом примере:

"0a".to_i(16) #=> 10

У меня проблема с необязательным аргументом в отношении строки, к которой вызывается метод.Я думал, что возвращаемое значение будет просто целочисленным значением 0.

1 Ответ

0 голосов
/ 07 февраля 2019

Простой ответ: это потому, что 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 излишне, конечно, просто используйте в некоторых случаях для разъяснения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...