减去没有二进制补码的带符号二进制数
发布时间:2020-12-16 09:22:08 所属栏目:百科 来源:网络整理
导读:所以我正在尝试编写代码来减去两个二进制数,但我不确定如何优雅地解决这个问题.保存二进制数的结构如下. 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) 综上所述: 如果两个数字具有相反的符号,则添加幅度.如果两个数字具有相同的符号,则从较大的幅度中减去较小的幅度.然后确定结果的符号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |