问题描述
(-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。