将二进制转换为十进制-结果太大



我正在尝试实现我自己的二进制转换为十进制的方法,我遵循以下计算二进制字符串101的十进制值的示例:

101 => 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 => 1 * 4 + 0 * 2 + 1 * 1 => 4 + 1 = 5>

方法是

def to_decimal binary
  num_array = binary.to_s.split('').map(&:to_i)
  puts num_array.inject { |dec, num| dec + num * 2**(num_array.length-1) }
end

这似乎适用于1001,它给出了9,但100给出了1, 11010给出了33,当它应该给出26。我试着查了一下,但我发现了几种不同的方法来处理这个问题,它们让我更加困惑。

而不是:

num_array.inject{ |dec, num| dec + num * 2**(num_array.length-1) }

你的意思是(乘以当前功率,并从最低到最高构建十进制):

 num_array.reverse!
 num_array.each_index.inject(0){ |dec, index| dec + num_array[index] * 2**index }

最新更新