首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加减二的补码

加减二的补码
EN

Stack Overflow用户
提问于 2010-10-07 09:21:09
回答 2查看 49K关注 0票数 6

使用6位的1和2的补码表示法,我试图解决以下问题:

代码语言:javascript
复制
12 - 7 

现在,我先取12的二进制和7的二进制。

代码语言:javascript
复制
12 = 001100 - 6 bit 
7 =  000111 - 6 bit

那么,我会不会把二的补码位翻过来加一呢?

代码语言:javascript
复制
12 = 110011 ones complement 
     +    1
    -------
     001101

7  = 111000 ones complement 
    +     1
   ---------
      111001

然后,将这两个补码相加

代码语言:javascript
复制
 001101
+111001
-------
1000110 = overflow? discard the last digit?  If so I get 5

现在,如果我有像这样的数字

代码语言:javascript
复制
-15 + 2

然后我会在MSB上添加一个符号幅度,如果它是零?

像这样:

代码语言:javascript
复制
-15 = 001111 6 bit

在翻转比特之前,我会在这里的末尾添加一个1吗?

代码语言:javascript
复制
  = 101111
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-07 09:43:20

使用二的补码来表示负值的好处是减法和加法是相同的。在您的例子中,您可以将12 - 7视为12 + (-7)。因此,您只需要找到-7的2的补码表示,并将其添加到+12:

代码语言:javascript
复制
12  001100
-7  111001   -- to get this, invert all bits of 7 (000111) and add 1
----------
 5 1000101

然后丢弃进位(表示溢出),您得到的结果是:000101,正如预期的那样等于5。

对于您的-15 + 2示例,只需按照相同的过程获得-15的两个补码表示:

代码语言:javascript
复制
15  001111
    110000   -- inverted bits
    110001   -- add 1

现在像往常一样做加法:

代码语言:javascript
复制
-15  110001
  2  000010
-----------
res  110011

要查看res是否确实等于-13,您可以看到它是负的(MSB设置)。对于幅度,转换为正(反转比特,加1):

代码语言:javascript
复制
res  110011
     001100  -- inverted bits
     001101  -- add 1

因此,正如预期的那样,震级为13级。

票数 15
EN

Stack Overflow用户

发布于 2010-10-07 09:24:11

不是的。2的补码算法不会因为负值的位置而改变。

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

https://stackoverflow.com/questions/3878062

复制
相关文章

相似问题

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