将32位二进制转换为基数10

时间:2015-01-13 05:54:12

标签: ruby

为什么

111111111111111111111111111110.to_s(10)

返回

"111111111111111111111111111110" 

而不是以下?

4294967294 

2 个答案:

答案 0 :(得分:4)

因为111111111111111111111111111110是一个基数为10的整数。试试这个:

0b11111111111111111111111111111110.to_s
# => "4294967294"

请注意二进制的0b前缀。

或者,也许你想要的是:

11111111111111111111111111111110.to_s.to_i(2).to_s
# => "4294967294"

答案 1 :(得分:0)

由于Yu Hao提到了问题所在,我不再重复了。我刚刚在这里展示了,如何使用Kernel#sprintf作为:

在Ruby中以其他方式获得结果
sprintf("%d", 0b11111111111111111111111111111110)
# => "4294967294"
  

When typing numbers格式字符用于描述数字系统,例如{strong}二进制和000_0000B或{{1} 0b000_000000F8H对于十六进制数字。默认情况下,该号码被视为十进制号码。

相关问题