如何计算带正负10的补码的负数减去正数?

问题描述

(-638)-(+185) 我正在尝试使用10的补码来解决它。 因此会导致10的comp(362)+ 10的comp(815)= 1177

但是在那之后我不知道该怎么办。 我了解到,如果第二个值大于第一个值,则必须放弃末端携带。 如果没有,我必须用补码更改结果,然后在它前面加上负数。 但是我认为只有一个数字需要补充。

这个问题需要我对两者进行补充。

总结我的问题。当两个数字都需要补10时,您如何计算? 签名的10的补码和10的补码有什么区别?

解决方法

您的错误:取185的补码

我们使用负数的补码来仅使用数字而不使用减号来表示它们。我们不需要使用非负数的补码。您应该执行的“加法”是362 + 185。

签名与未签名

“签名”仅表示您可以代表负数。 “未签名”表示您不能这样做。如果未签名,则根本不需要“ 10的补码”。因此,只要您阅读“ 10的补码”,就可以认为它是带符号的。

请注意,只有在预定义了要表示的整数范围时,10的补码才有意义。此范围对应于多个数字。

在您的情况下,我可以猜测数字的位数为3,因此范围将为[-500,+499]。当然,如果您选择更大的位数和更大的范围,例如[-500000,+499999]的6位数字,最后您将得到相同的结果。

三位数无负号的算术运算

我们假设范围是[-500,499]。为了使用三个数字且没有减号来表示此范围内的负数,我们将添加1000。因此,您的数字-638将表示为362(因为362 = -638 + 1000)。数字185已经是非负数,因此我们将其表示为185

然后我们可以执行添加操作:

 362
+185
====
 547

结果为547,它表示一个负数。它代表的负数是547-1000 = -453。

六位数且无负号的算术运算

我们假设范围是[-500000,499999]。为了使用六个数字且没有减号来表示此范围内的负数,我们将为其添加1000000。因此,您的数字-638将表示为999362(因为362 = -638 + 1000000)。数字185已经是非负数,因此我们将其表示为000185

然后我们可以执行添加操作:

 999362
+000185
=======
 999547

结果为999547,它表示一个负数。它代表的负数是999547-1000000 = -453。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...