计算C中的整数溢出

时间:2015-08-29 01:46:54

标签: c integer integer-overflow

我试图解决x的以下等式,使if语句成立。我尝试过使用线性同余方程,但无法得到正确的答案。

我使用的假设是整数溢出发生在2 ^ 63-1,x是类型long

有人可以给我一个如何做到这一点的指针吗?

long arg1 = 1234123412341234;
long arg2 = -3456345634563456;
if(x * arg1 == arg2) {
    //true
}

1 个答案:

答案 0 :(得分:2)

首先,请注意未定义有符号整数溢出。但是,定义了无符号整数溢出。我不确定这会改变多少问题,但我会假设无符号整数而不是有符号整数。

问题同样是 x × arg1 = arg2 。为了使包装明确,我们有 x × arg1 arg2 (mod 2 64 )。如果我们想要 x ,我们只需要解决它;特别是,我们有 x arg1 -1 × arg2 (mod 2 64 )。

那么问题是如何找到 arg1 -1 。碰巧这被称为modular multiplicative inverse,当它存在时(如果 arg1 存在于2 64 的相对素数),则可以使用extended Euclidean algorithm