与 Python 中的相同函数相比,C 中的模数 (%) 返回未定义的结果?

Modulo (%) in C returning undefined result compared to the same function in Python?

我正在编写一个(我认为)是一个实现仿射密码的简单程序,并且遇到了一个问题,因为我没有从 C89 中的模运算中获得预期的结果。

int main()
{
    foo(10);
    return 0;
}

int foo(int enc)
{
    int a = 5, b = 22, inv_a = 77, result;
    result = (inv_a * (enc - b)) % 128;
    printf("result = %d = %c\n", result, result);
    return result;
}

上面的结果是 -28(未定义的行为?)

同时,python中的相同函数:

def foo(enc):
    a = 5
    b = 22
    inv_a = 77
    result = (inv_a * (enc - b)) % 128
    print(result)

foo(10)

returns 我的预期结果是 100。在调试过程中,我发现结果是相同的,直到使用了模数。我不知道的 C 模中发生了什么?

C中的%运算符实际上并不执行取模,而是执行除法的余数。后者允许负值。

具体来说,来自 C standard 的第 6.5.5p6 节:

the expression (a/b)*b + a%b shall equal a