c++ - 减去未知 bitesize 的两个值

标签 c++ math subtraction twos-complement

我正在尝试使用二进制补码将两个值相互减去。我对溢出位有疑问。由于我的容器包含无限位大小的整数,我不知道结果的最高位是真的来自结果还是只是溢出。我如何在不使用 - 的情况下摆脱溢出? (我不能只做 1 << bits - 1 因为那会涉及到使用容器,它还没有工作 operator-)

0b1111011111 - 0b111010000 -> 0b1111011111 + 0b000110000 -> 1000001111

对比(正常)

0b00000101 - 0b000000001 -> 0b00000101 + 0b11111111 -> 0b100000100 -> 0b00000100

最佳答案

如果你计算 a - b 你必须以某种方式“安排”这个词 - 因为你必须为 2 补语做一个否定,位宽为 m=max(bitwidth(a), bitwidth(b))。

要消除 of 溢出,您只需执行 mask = negate(1 << m),然后使用按位与应用掩码。 (或者您可以只检查该位并相应地处理它)。

关于c++ - 减去未知 bitesize 的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480309/

相关文章:

C++ memcpy 将结构体转换为字节数组

javascript - 尝试计算在 svg 和 javascript 中创建的饼图切片的 Angular

javascript简单的数学问题

c - 如何优化 C 中围绕零对称的整数区间的范围检查?

r - 减去不同大小的 data.frames 和 data.tables

opencv - OpenCV Codebook方法-背景模型

c++ - 在 C++ 中测试自定义列表类时卡住

C++ while循环添加的问题

c++ - 为什么使用具有特殊含义的覆盖和最终标识符而不是保留关键字?

algorithm - 三角测量 : Find a 3D point minimizing the Distance from N 3D Lines/Rays