首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分数的2的补码表示?

分数的2的补码表示?
EN

Stack Overflow用户
提问于 2012-03-30 23:39:34
回答 3查看 13.3K关注 0票数 3

我对这个有点迷惑。我需要使用两个小数位0.(a-1)(a-2)

就像这样,现在我可以使用.00 .01 .10.11,但我也需要负数(在2的补码中),那么.10会是-.5吗?或者它会是-.25?和.11一样,那就是-.75吗?或者它会是-.5?我很确定在这两种情况下都会是前者,但我并不完全肯定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 23:51:26

在二的补码表示法中,负数的所有最高有效位都被设置为1。假设您将这些数字存储为8位,其中2位于“二进制点”的右侧。

根据定义,x + -x = 0,所以我们可以这样写:

代码语言:javascript
复制
0.5  +  -0.5 = 0.10 + 111111.10 = 0   // -0.5  = 111111.10
0.25 + -0.25 = 0.01 + 111111.11 = 0   // -0.25 = 111111.11
0.75 + -0.75 = 0.11 + 111111.01 = 0   // -0.75 = 111111.01

诸若此类。

使用这样的8位,您可以存储的最大数字是

代码语言:javascript
复制
011111.11 = 31.75

最小正数是

代码语言:javascript
复制
000000.01 = 0.25

最小负数为

代码语言:javascript
复制
111111.11 = -0.25

最小的(也就是最负的)是

代码语言:javascript
复制
100000.00 = -32
票数 5
EN

Stack Overflow用户

发布于 2012-03-31 00:09:24

这样看吧:

你有正常的二进制表示

让我们假设8位字...

第一位(MSB)的值为128,第二位为64,依此类推...

换句话说,第一位(MSB)是2^7...第二位是2^6...最后一位是2^0

现在我们可以假设我们的8位字有2个小数位……

现在我们从第一位(MSB) 2^5开始,以最后一位为2^-2结束

这里没有魔法..。

现在将其转换为二进制补码:简单地将第一位的值求反

所以不是2^5,而是-2^5

所以基数10 -0.75应该是二进制补码

111111.01……

(1*(-32) + 1*16 + 1*8 + 1*4 + 1*2 +1*1 + 0*0.5 + 1*0.25)

(1*(-2^5) + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 +1*2^0 + 0*2^(-1) + 1*2^(-2))

票数 1
EN

Stack Overflow用户

发布于 2012-03-30 23:49:15

存储在二的补码中的数字反转最高位的大小的符号(例如,对于16位的数字,高位是-32768而不是+32768)。所有其他位的行为与正常一样。因此,在对多字数字执行数学运算时,每个数字的高位字应该被视为二进制补码(因为它的最高位将是整个数字的最高位),但每个数字中的所有其他字都应该被视为无符号量。

例如,16位二进制补码数具有位值(-32768、16384、8192、4096、2048、1024、512、256、128、64、32、16、8、4、2和1)。拆分为两个8位部分,这些部分将具有位值(-32768、16384、8192、4096、2048、1024、512和256);和(128、64、32、16、8、4、2和1)。第一组值是2的补码8位数乘以256;后一组值是一个无符号的8位数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9946183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档