如何用2的补码中的分数表示负数?

Tom*_*Tom 21 twos-complement

所以我想代表这个数字-12.5.所以12.5等于:

001100.100
Run Code Online (Sandbox Code Playgroud)

如果我不计算分数,那么它很简单,-12是:

110100
Run Code Online (Sandbox Code Playgroud)

但是什么是-12.5?是110100.100吗?我该如何计算这个负分数?

Mor*_*gan 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).
Run Code Online (Sandbox Code Playgroud)

在带符号的二进制补码中,最高有效位(MSB)变为负数.因此它代表数字符号:负数为"1",正数为"0".

对于三位数,行将保存这些值:

-4, 2, 1
 0  0  1 => 1
 1  0  0 => -4
 1  0  1 => -4 + 1 = -3
Run Code Online (Sandbox Code Playgroud)

由定点(分数)系统保持的位的值不变.列值遵循与之前相同的模式,基数(2)为幂,但功率为负:

2^2 (4), 2^1 (2), 2^0 (1) . 2^-1 (0.5), 2^-2 (0.25), 2^-3 (0.125)
Run Code Online (Sandbox Code Playgroud)

-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


小智 6

所以;U想用2的补码表示法来表示-12.5

12.5:->> 01100.1

(01100.1) 的 2 补码:->>10011.1

通过检查 2 的补码表示的加权代码属性(MSB 权重为 -ve)来验证 ans。我们会得到-16+3+.5=-12.5


kwj*_*sai 5

你可以反复加倍数,直到它是负整数或达到一个定义的限制,然后相应地设置小数点.

-25是11100111,所以-12.5是1110011.1