为什么(-1)%(unsigned int)与(-1)%(int)+(用uint计算什么并转换为int的好方法)不同

时间:2019-10-08 15:51:32

标签: c modulo

#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即可,将其正确转换为正确的修复程序?

1 个答案:

答案 0 :(得分:3)

所有C的算术运算符(<<>>除外,它们仅对第一个操作数执行此操作)在执行操作之前,根据语言的类型提升规则将两个操作数都提升为一个公共类型。 。将c(值-1)提升为unsigned可以执行模数化,模一加该类型可表示的最大值,即一加UINT_MAX。 -1用“加号”抵消,结果是UINT_MAX,通常是4294967295。然后4294967295U % 10U当然是5。