0

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

但是我面临一个问题,我需要添加我的位集以调整我的位集以适应添加后所需的确切位数,但我无法提出一个绝对法则来确切知道需要多少位存储所有内容,只知道两个数字正在处理的位数(它的表示是正数还是负数,没关系)

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

提前致谢。jav974

4

2 回答 2

2

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

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

在相同符号数的情况下,您可能需要一个额外的位 - 您可以从较小数字的最高有效位开始,并扫描可以吸收进位影响的 0。例如:

1010111011101 +
..10111010101
..^ start here

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

1001111011101 +
..10111010101
..^ start here

在这种情况下,较长的输入在起始位置为 0,您首先需要进行右移扫描以确定是否会从该起始位置的右侧进行进位,然后再启动上面的左移扫描.

当符号不同时:

  • 如果一个值比另一个值少 2 位或更多位,则结果中所需的位数将与较大输入中的位数相同或少 1 位
  • 否则,您将不得不做更多的工作来计算结果需要多少位数。

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

于 2013-05-29T08:31:31.410 回答
0

最后,加法后的代表性比特数最多为拥有最多的比特数 + 1。

这是使用无符号字符的解释:

对于最大无符号字符:

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

自然地,如果 max + max =(max + 1 的位),那么对于 0 和 max 之间的 x 和 y,结果位为 max + 1(非常最大值)

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

于 2013-05-29T11:41:37.750 回答