c ++按位加法,计算代表位的最终数量

时间:2013-05-29 08:19:40

标签: c++ bit-manipulation addition

我目前正在开发一个处理bitset上所有算术运算的实用程序。 bitset可以自动调整大小以适应任何数字,因此它可以在非常大的位集上执行加/减/除法/乘法和模数(我已经在内部加载700Mo电影以将其视为原始整数)< / p>

我面临一个问题,我需要添加调整大小以适应添加后所需的确切位数,但是我无法想出一个绝对定律来确切知道有多少位需要存储所有内容,只知道两个数字处理的位数(无论是正数还是负数,都没关系)

我有完整的代码,如果我的问题不够明确,我可以与您分享以指出问题。

提前致谢。 jav974

2 个答案:

答案 0 :(得分:2)

  

但我无法想出一个绝对的法则来确切知道存储所有内容需要多少位,只知道这两个数字正在处理的位数(无论是正数还是负数,它都没有'重要)

你也不会:“只有这两个数字正在处理的位数”没有办法。

对于相同的数字,您可能需要一个额外的位 - 您可以从较小数字的最高位开始,并扫描0以吸收进位的影响。例如:

1010111011101 +
..10111010101
..^ start here

由于这两个数字都是1,你需要向左扫描直到你达到0(在这种情况下,结果与较大的输入具有相同的位数),或直到你达到较大数字的最高位(在这种情况下,结果中还有一位数字。)

1001111011101 +
..10111010101
..^ start here

在这种情况下,较长的输入在起始位置有一个0,你首先需要进行一次右移扫描,以确定在开始进入左边之前是否有从该起始位置右侧的进位 - 移动扫描。

当迹象不同时:

  • 如果一个值的数字小于另一个,则结果中所需的位数将与较大输入中的数字相同或小一位
  • 否则,你需要做更多的工作才能进行补充,以计算出结果需要多少位数。

这假设符号位与幅度位数分开。

答案 1 :(得分:0)

最后,添加后的代表位数最多为拥有最多+ 1的位数。

以下是使用unsigned char:

的解释

对于max unsigned char:

   11111111 (255)
+  11111111 (255)
= 111111110 (510)

当然,如果max + max =(max + 1的位),那么x和y在0和max之间,结果位是max + 1(非常大)

这与有符号整数的工作方式相同。