如何在ruby中将二进制补码二进制转换为十进制?

时间:2017-07-28 04:30:30

标签: ruby binary twos-complement

将二进制补码二进制转换为十进制的最简单方法是什么? 例如,如果我通常转换一个字符串,如" 1001"到小数我会得到9.但我实际上想要得到一个简单的-7。你们有什么建议?,

1 个答案:

答案 0 :(得分:4)

从您的问题看来,您使用的是4位系统 这可能对你有用,我得到你要求的结果。
这里有两个函数,一个用于4位,一个用于16位二进制'补充。

  # For 4 bit
  def convert_4bit_to_signed_binary(binary)
    binary_int = binary.to_i(2)
    if binary_int >= 2**3 # for 4 bit
      return binary_int - 2**4
    else
      return binary_int
    end
  end

  # For 16 bit
  def convert_16bit_to_signed_binary(binary)
    binary_int = binary.to_i(2)
    if binary_int >= 2**15 # for 4 bit
      return binary_int - 2**16
    else
      return binary_int
    end
  end

  i = convert_4bit_to_signed_binary('1001')   # will give -7
  j = convert_16bit_to_signed_binary('1001')  # will give 9

  puts i
  puts j  

如果这适合您,请告诉我?