嗨,我知道在 C
中,负被除数的模数(modulo)
会是负数,但我发现使用长无符号除数或长长无符号除数的负被除数的模数会是正数!
这里有个例子:
#include <stdio.h>
int main(int argc, char** argv)
{
long long int a = -2205348223670655684LL;
printf("%lld %lld %lld %lld %lld %lld\n", a % 20, a % 20L, a % 20LL, a % 20U, a % 20LU, a % 20LLU);
return 0;
}
并且输出:
$> ./a.out -4 -4 -4 -4 12 12
有人能解释一下为什么吗?我已经试过使用 GCC 4.8 和 5.1。