#include <stdio.h>
int main()
{
unsigned int a=10;
int b=10;
int c=-1;
printf("%d %d %d",(c%a),(c%(int)a),(c%b));
return 0;
}
输出“ 5 -1 -1”(使用https://www.onlinegdb.com/)。达到5的计算是什么?只要将unsigned int放入int中,它是否就将其转换为正确的修复程序?
<<
和>>
除外),根据语言的类型提升规则,在执行该操作之前将两个操作数都提升为相同的类型。将c
(值为-1)提升为unsigned
可以执行模数化,模数加该类型可表示的最大值,即1加UINT_MAX
。 -1用“一加”抵消,结果为UINT_MAX
,通常为4294967295。然后4294967295U % 10U
当然是5。