2

我想计算: (-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);
}

为什么会这样?

4

2 回答 2

7

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

于 2012-12-26T11:30:11.017 回答
1

试试这个..

return ((*(int*)key) % (int)tableSize);

于 2012-12-26T11:44:14.423 回答