我要计算:
(-15%3)应该是0,但我却得到了1:

当我明确地做:

int IntFcn (const void *key, size_t tableSize)
{
    printf("%d\n",(*(int*)key)); // prints -15
    printf("%d\n",tableSize); // prints 3
    printf("%d\n",(-15) % 3); // prints 0
}


我得到正确的结果(0),但是当我尝试使用下面的变量时,我得到1:

int IntFcn (const void *key, size_t tableSize)
{
    printf("%d\n",(*(int*)key)); // prints -15
    printf("%d\n",tableSize); // prints 3
    printf("%d\n",((*(int*)key) % tableSize)); // prints 1
    return ((*(int*)key) % tableSize);
}


为什么会这样呢?

最佳答案

在第二种情况下,模的第二个操作数是无符号整数,因此在执行模之前,第一个操作数也会提升为无符号的整数。因此结果将是(unsigned)(-15) % 3,它等于(对于32位int)与4294967281 % 3 == 1

关于c - 使用底片时,模数返回错误结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14039844/

10-13 06:12