【问题标题】:how to convert negative fraction decimal to binary如何将负分数十进制转换为二进制
【发布时间】:2017-02-24 13:24:21
【问题描述】:

我想问一下如何将负分数十进制数表示为有符号二进制数。例如二进制中的 -0.5 是什么。

【问题讨论】:

  • 它是 -0.1,因为 - 2^-1 = - 0.5

标签: binary decimal


【解决方案1】:

首先,您可以将负数视为正数。分别找到小数和小数部分后,您可以通过将所有 1 变为 0 并将 0 变为 1 将其转换为负数。最后你需要加1。

例如要将 -5.75 转换为二进制,首先我们需要确定点的位置和二进制数的长度。让我们定义数字的长度为 8 位,小数部分为 4 位,小数部分为 4 位。

先求(正)5.75的二进制表示:

5=0101
0.75=.1100 then
5.75=0101.1100 in 8 bits

要转换负数,程序是标准的,反转所有位并将最低有效位加 1。

number:        0101.1100
inversion:     1010.0011
addition of 1: 1010.0011 + 0.0001=1010.0100

让我们检查一下我们的表示是否正确:

1010.0100 => -8 + 2 + 0.25 = -5.75

就是这样。

【讨论】:

    【解决方案2】:

    希望对您有所帮助。

    • 以下处理将十进制转换为二进制。 如果您想将此设为负数,则只需在完成后添加一个减号即可。 (例如将 25.5 转换为二进制 11001.1,所以 -25.5 是 -11001.1)

    如果您想处理带符号的二进制文件(不同的东西),请转到我链接的源并阅读更多相关信息。来源有一个在线计算器供您使用。

    来源:http://www.realbinaryconverter.com/index.php

    将小数转换为二进制小数

    取一个像 436.656625 这样的数字并尝试转换为二进制是一个简单的过程。在这里,我们不必关心转换整个整数部分(436),因为链接站点已对此进行了介绍。我们现在要做的就是转换二进制小数部分(.656625),然后将其与二进制整数部分结合。

    Multiply 0.656625 by 2: 0.656625*2=1.31325  
    Keep note of that 1 from the whole part 
    Remove the 1. Now we have 0.31325 
    Repeat step 2: multiply by 2: 0.31325*2=0.6265 
    Keep note of that 0 from the whole part 
    Multiply by 2: 0.6265*2=1.253 
    Keep note of that 1 from the whole part 
    Remove the 1. Now we have 0.253 
    Multiply by 2: 0.253*2=0.506 
    Keep note of that 0 from the whole part 
    Multiply by 2: 0.506*2=1.012 
    Keep note of that 1 from the whole part 
    Remove the 1. Now we have 0.012 
    

    重复这个过程:乘以 2 并记下得到的整数部分。如果整个整数部分为 1,请记下该 1,然后删除该 1 并继续此过程。 ...

    最后,我们的二进制分数是 0.10101000000110...(然后继续)。我现在将用一个更简单的结果来演示。将 0.8125 转换为二进制。

    0.8125*2=1.625, we get 1
    0.625*2=1.25, we get 1
    0.25*2=0.5, we get 0
    0.5*2=1.0, we get 1
    

    什么都没有!

    现在把我们得到的数字按照我们得到的顺序放在小数点后面。 0.8125 = 0.1101 二进制。

    现在回答您的具体问题

    Multiply 0.5 by 2: 0.5*2=1.0 
    Keep note of that 1 from the whole part 
    Remove the 1. Now we have 0
    

    什么都没有! 现在我们把我们得到的数字按照我们得到的顺序放在小数点后面。 0.5 = 0.1 二进制。

    所以 -0.5 = -0.1 二进制。您可以在提供的来源处查看此内容。

    【讨论】:

      【解决方案3】:

      就像小数一样,小数点左边的数字是底数的升幂,右边的数字是底数的幂。

      所以124.71 是:

      10^2   10^1   10^0   10^-1   10^-2
      100  + 20   + 4    + 7/10  + 1/100
      

      对于二进制,它是一样的,除了上升的力量是1, 2, 4, 8, ...而不是1, 10, 100, 1000, ...

      而且还原能力不是1/10, 1/100, 1/1000, ...,而是1/2, 1/4, 1/8, ...

      所以-0.5 很简单,因为它只包含1/2 位置,二进制:

      -0.1: - means it will be negative.
            0 x 2^0(1) =     0
            1 x 2^-1(1/2) =  0.5
                            ----
                            -0.5
      

      更复杂的数字是通过对各个位置求和来构建的。例如,十进制65.625 是:

      1 x 2^6      =  64
      0 x 2^5
      0 x 2^4
      0 x 2^3
      0 x 2^2
      0 x 2^1
      1 x 2^0(1)   =   1
      .
      1 x 2^-1     =   0.5
      0 x 2^-2
      1 x 2^-3     =   0.125
      ^               ------
      |               65.625
      |
      +-> 1000001.101
      

      【讨论】:

      • 感谢您的回答,但我想知道如何完全用二进制表示 -.5 但在问题中您的数字有一个负号。所以我们在学校里的教导是,如果数字是负数,你就把整数变成负数。但问题是如果整数为 0,我们如何使整数为负数
      • @AbdelrahmanM.MoheyEl-din,这取决于您如何对符号进行编码。通常(例如使用 IEEE754 编码),您将其中一位专用于表示符号。如果它是零,它被认为是积极的,而一代表消极的。这导致存在 两个 零,一个正数和一个负数,一些数学人士坚持认为这证明了计算机科学家不应该被数学信任:-) 更多细节可以在@找到987654321@
      【解决方案4】:

      将负十进制(base-10)数字转换为二进制(base-2)是一个相对简单的操作。

      我以 -10 为例。 您应该做的第一件事是以二进制表示正 10:01010。 下一步是翻转所有位,这意味着将零变为一,反之亦然; 10101。 最后一步是在 10101 上加 1,得到 10110。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 2021-12-07
        • 2019-04-26
        • 2011-02-17
        相关资源
        最近更新 更多