我想表示数字-12.5
. 所以12.5等于:
001100.100
如果我不考虑分数,那么-12
就是一个简单的数字。110100
但是-12.5是什么?它是110100.100
吗?我如何计算这个负分数?
我想表示数字-12.5
. 所以12.5等于:
001100.100
如果我不考虑分数,那么-12
就是一个简单的数字。110100
但是-12.5是什么?它是110100.100
吗?我如何计算这个负分数?
在十进制数系统中,每个数字位置(或列)代表(从右到左读取数字):个位(即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
所以,您想要用二进制补码表示-12.5
12.5:>> 01100.1
2的补码(01100.1):>>10011.1
通过检查2的补码表示法的加权码属性(最高位权重为负数),验证答案。我们将得到-16 + 3 + .5 = -12.5
您可以将数字倍增,直到它成为负整数或达到定义的限制,然后相应地设置小数点。
-25是11100111,所以-12.5是1110011.1。