#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即可,将其正确转换为正确的修复程序?
答案 0 :(得分:3)
所有C的算术运算符(<<
和>>
除外,它们仅对第一个操作数执行此操作)在执行操作之前,根据语言的类型提升规则将两个操作数都提升为一个公共类型。 。将c
(值-1)提升为unsigned
可以执行模数化,模一加该类型可表示的最大值,即一加UINT_MAX
。 -1用“加号”抵消,结果是UINT_MAX
,通常是4294967295。然后4294967295U % 10U
当然是5。