为什么二进制到十进制的转换涉及数字'8'?

时间:2017-12-20 03:28:30

标签: ruby binary byte binaries

我正在寻找针对Coderbyte的以下编码挑战的解决方案:

  

使用Ruby语言,让函数BinaryReversal(str)获取传递的str参数,这将是一个正整数,取其二进制表示,反转该位串,然后最后返回十进制形式的新反转字符串。例如:如果str"47",则此整数的二进制版本为00101111。你的程序应该反转这个二进制字符串,然后变成:11110100,然后最后返回该字符串的十进制版本,即244

解决方案是:

def BinaryReversal(str, dig = 8)
  binary = str.to_i.to_s(2).reverse
  dig += 8 until dig >= binary.length
  binary += '0' until binary.length == dig
  binary.to_i(2)
end

我不明白为什么二进制文件需要添加0,直到它的长度等于dig。事实上,我根本不理解dig的作用。

1 个答案:

答案 0 :(得分:1)

当str为“47”时,二进制将被指定为“111101”。

  binary = str.to_i.to_s(2).reverse

通常,您将二进制值表示为8个字符或8位。此时,您不能简单地将二进制字符串转换回整数。 “111101”是二进制61.

相反,你需要用“0”填充“111101”,直到它有8位。这就是以下代码的作用。

  dig += 8 until dig >= binary.length
  binary += '0' until binary.length == dig

一旦有了8位,就可以将它转换回整数。