我正在尝试使用二进制补码将两个值相互减去。我对溢出位有疑问。由于我的容器包含无限位大小的整数,我不知道结果的最高位是真的来自结果还是只是溢出。我如何在不使用 -
的情况下摆脱溢出? (我不能只做 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/