Ruby将int转换为bin,反之亦然

时间:2014-05-14 14:03:45

标签: ruby

我遇到了一些我无法理解的问题。你能解释一下为什么在将int 127转换为二进制时我得到1111111因为结果应该是'01111111'吗?

现在我正在尝试这个例子中的女巫to_s(2)

127.to_s(2)
Result: '1111111'

提前致谢!

3 个答案:

答案 0 :(得分:5)

1111111 2 = 01111111 2 = 001111111 2 = 127 10 = 0127 10 = 00127 10

它不应该是01111111,而不应该是0127。您可以根据需要添加任意数量的前导零,但这绝对没有义务或内在原因。

1111111 2 = 1 * 2 7 + 1 * 2 6 + ... = 127
01111111 2 = 0 * 2 8 + 1 * 2 7 + 1 * 2 6 + ... = 127


如果您从127询问如何生成01111111,快速搜索会发现以下两种解决方案:

  • "%08b" % 127
  • sprintf("%08b", 127)

(我不认识红宝石。)

答案 1 :(得分:5)

您可以使用sprintf

sprintf("%08b", 127) #=> "01111111"
#         ^^^
#         |||
#         ||+- "b" = format argument as binary number
#         |+-- "8" = number of digits
#         +--- "0" = pad with 0

答案 2 :(得分:0)

这是正确的二进制转换

127符合2^7=128

1 1 1 1 1  1  1
1+2+4+8+16+32+64= 127