减去没有二进制补码的带符号二进制数

减去没有二进制补码的带符号二进制数,第1张

概述所以我正在尝试编写代码来减去两个二进制数,但我不确定如何优雅地解决这个问题.保存二进制数的结构如下. typedef struct _bitb { short bit; struct _bitb *nbit;} BitB;typedef struct _bignum { short sign; BitB *bits;} BigNum; 因此,二进制数由包含其绝 所以我正在尝试编写代码来减去两个二进制数,但我不确定如何优雅地解决这个问题.保存二进制数的结构如下.

typedef struct _bitb {    short bit;    struct _bitb *nbit;} BitB;typedef struct _bignum {    short sign;    BitB *bits;} BigNum;

因此,二进制数由包含其绝对值的位列表表示,从LSB到MSB,然后是表示该数字是正还是负的短路(它是任意精度算术的实现).如何在没有两个补码的情况下从另一个中减去一个数字?

在有人要求之前,这是针对学校的,但我不想在代码中使用解决方案,只需要我可以实现的通用算法.我一直在寻找,似乎没有一个好的算法可以解决一般情况.我是否需要检查数字的符号,然后为所有可能的情况实施代码(负负正,正负负,正负正,负负正)?或者我应该转换为2的补码?

解决方法 您可以将问题减少到两种情况:相反的迹象和相同的迹象.

减去具有相反符号的数字需要添加两个绝对值.例子:

(-7) - (+5) = -(7+5)(+7) - (-5) = +(7+5)

要减去具有相同符号的数字,您需要从较大的绝对值中减去较小的绝对值.例子:

(+7) - (+5) = +(7-5)(+7) - (+9) = -(9-7)(-7) - (-5) = -(7-5)(-7) - (-9) = +(9-7)

正如您所看到的,结果的符号实际上有六种情况,如下所示(其中X,Y和Z是数字的大小).

(-X) - (+Y) ==> -(Z)(+X) - (-Y) ==> +(Z)(+X) - (+Y) and (X >= Y) ==> +(Z)(+X) - (+Y) and (X <  Y) ==> -(Z)(-X) - (-Y) and (X >  Y) ==> -(Z)(-X) - (-Y) and (X <= Y) ==> +(Z)

综上所述:

如果两个数字具有相反的符号,则添加幅度.如果两个数字具有相同的符号,则从较大的幅度中减去较小的幅度.然后确定结果的符号.

总结

以上是内存溢出为你收集整理的减去没有二进制补码的带符号二进制数全部内容,希望文章能够帮你解决减去没有二进制补码的带符号二进制数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1212148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存