首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个正数的二的补码加法是否等同于正常的加法?

两个正数的二的补码加法是否等同于正常的加法?
EN

Stack Overflow用户
提问于 2010-03-14 06:57:06
回答 2查看 1.1K关注 0票数 0

如果我有两个正整数,比如0x1234和0x5678,那么0x8765 + 0xfedc = 0x8641,如果'+‘意味着2的补码相加,mod 2^16?

EN

回答 2

Stack Overflow用户

发布于 2010-03-14 08:24:54

因为2的补码是存储负数的一种方式,所以没有“正数的2补码相加”这样的东西:-n被存储为~n + 1,这相当于2^w -n,其中w是整数类型的宽度。

二的补码是为模2^w算术设计的:(+a) + (-b)表示为a+ (2^w - b) = ( a - b ) + 2^w,这在模2^w归约后给出了a- b的正确答案。类似地,( -a ) + (-b)表示为(2^w - a) + (2^w - b) = (-a - b) +2* 2^w,它简化为预期的-a-b。

票数 3
EN

Stack Overflow用户

发布于 2010-03-14 07:44:13

这个问题非常模糊。这就是说:

在位级上,二进制补码加法等价于无符号整数的模加法。唯一的区别在于如何解释输入和结果的位模式。

这意味着,如果有两个正的16位二进制补码数a和b,则twos_complement_add(a,b)为:

  • a +b if (a+b) < 2^15
  • a +b- 2^16否则
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2440372

复制
相关文章

相似问题

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