我试图编写代码来减去两个二进制数,但我不确定如何优雅地解决这个问题。存储二进制数的结构如下。
typedef struct _bitb {
short bit;
struct _bitb *nbit;
} BitB;
typedef struct _bignum {
short sign;
BitB *bits;
} BigNum;
因此,一个二进制数由一系列比特组成,包含其绝对值,从最低有效位(LSB)到最高有效位(MSB),然后是一个short类型的符号位,表示这个数是正还是负(它是任意精度算术的实现)。如果不使用二进制补码,如何计算两个二进制数之间的差异?
在有人问之前,我要说明这是用于学校的,但我不想要代码解决方案,只需要一般的算法,我可以自己实现。我已经搜索了很多资料,似乎没有一个好的算法可以解决一般情况。我需要检查这些数字的符号,然后为所有可能的情况编写代码吗(负减正,正减负,正减正,负减负)?或者是否应该转换为二进制补码?
|A| < |B|
的情况下,您需要使用二进制补码来计算A-B
。例如,如果A = 2
且B = 5
,则A-B
将为-3
,您需要对结果进行二进制补码运算,即-(5-3)
。因此,不确定如何避免使用二进制补码。 - Rishikesh Raje