与 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
我正在编写一个(我认为)是一个实现仿射密码的简单程序,并且遇到了一个问题,因为我没有从 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 equala