【问题标题】:Why does conversion of binary to decimal involve the number '8'?为什么二进制到十进制的转换涉及数字“8”?
【发布时间】:2018-06-02 13:28:10
【问题描述】:

我正在寻找 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

我不明白为什么二进制文件需要在其上添加0s,直到它的长度等于dig。其实我完全不懂dig的作用。

【问题讨论】:

  • 我不了解 Ruby,但我的猜测是,它正在计算将值左填充到 8 位长度所需的零(例如,10001 到 00010001 所以反转的值是正确的 (10001000)。

标签: ruby binary byte binaries


【解决方案1】:

当str为“47”时,二进制会被赋值为“111101”。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 2018-06-24
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2023-04-03
    相关资源
    最近更新 更多