所以我想表示数字-12.5
。所以12.5等于:
001100.100
如果我不计算分数,那么很简单,-12
是:
110100
但是什么是-12.5?是110100.100
吗?我该如何计算这个负分数?
答案 0 :(得分:25)
使用十进制数字系统,每个数字位置(或列)代表(从右到左读取一个数字):单位(10 ^ 0),十(即10 ^ 1),数百(即10 ^ 2)等等。
对于无符号二进制数,基数为2,因此每个位置变为(再次,从右到左阅读):1(即2 ^ 0),2(即2 ^ 1),4(即2 ^ 2)等等。
例如
2^2 (4), 2^1 (2), 2^0 (1).
在有符号的二进制补码中,最高有效位(MSB)变为负数。因此它代表数字符号:负数为“1”,正数为“0”。
对于三位数字,行将保存这些值:
-4, 2, 1
0 0 1 => 1
1 0 0 => -4
1 0 1 => -4 + 1 = -3
定点(分数)系统保持的位的值不变。列值遵循与之前相同的模式,基数(2)为幂,但功率为负:
2^2 (4), 2^1 (2), 2^0 (1) . 2^-1 (0.5), 2^-2 (0.25), 2^-3 (0.125)
-1始终为111.000
-0.5加0.5:111.100
在您的情况下,110100.10
等于-32 + 16 + 4 + 0.5 = -11.5。你做的是创建-12然后添加0.5而不是减去0.5。
你真正想要的是-32 + 16 + 2 + 1 + 0.5 = -12.5 = 110011.1
答案 1 :(得分:5)
你可以反复加倍数字,直到它为负整数或达到一个定义的极限,然后相应地设置小数点。
-25是11100111,所以-12.5是1110011.1
答案 2 :(得分:2)
所以;你想在2的补码表示中表示-12.5
12.5: - >> 01100.1
2的补充(01100.1): - >>> 10011.1
通过检查2的补码表示(MSB权重为-ve)的加权代码属性来验证ans。我们得到-16 + 3 + .5 = -12.5