【发布时间】:2017-02-24 13:24:21
【问题描述】:
我想问一下如何将负分数十进制数表示为有符号二进制数。例如二进制中的 -0.5 是什么。
【问题讨论】:
-
它是 -0.1,因为 - 2^-1 = - 0.5
我想问一下如何将负分数十进制数表示为有符号二进制数。例如二进制中的 -0.5 是什么。
【问题讨论】:
首先,您可以将负数视为正数。分别找到小数和小数部分后,您可以通过将所有 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
就是这样。
【讨论】:
希望对您有所帮助。
如果您想处理带符号的二进制文件(不同的东西),请转到我链接的源并阅读更多相关信息。来源有一个在线计算器供您使用。
来源: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 二进制。您可以在提供的来源处查看此内容。
【讨论】:
就像小数一样,小数点左边的数字是底数的升幂,右边的数字是底数的幂。
所以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
【讨论】:
将负十进制(base-10)数字转换为二进制(base-2)是一个相对简单的操作。
我以 -10 为例。 您应该做的第一件事是以二进制表示正 10:01010。 下一步是翻转所有位,这意味着将零变为一,反之亦然; 10101。 最后一步是在 10101 上加 1,得到 10110。
【讨论】: