我想计算:( - 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
}
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果(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);
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
在第二种情况下,模数的第二个操作数是无符号整数,因此在执行模数之前,第一个操作数也会被提升为无符号.因此结果将(unsigned)(-15) % 3
是相等的(对于32位int
)4294967281 % 3 == 1
.