繁体   English   中英

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

[英]c++ bitwise addition , calculates the final number of representative bits

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

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

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

提前致谢。 jav974

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

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

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

1010111011101 +
..10111010101
..^ start here

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

1001111011101 +
..10111010101
..^ start here

在较长输入在起始位置处为0的情况下,首先需要进行右移扫描以确定在启动上方左移扫描之前是否存在来自该起始位置右侧的进位。

当标志不同时:

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

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

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

这是一个解释,使用unsigned char:

对于max unsigned char:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM