为什么(-1)%(unsigned int)与(-1)%(int)+(用uint计算什么并转换为int是一个好的解决方案)[重复]

问题描述 投票:0回答:1
此问题已经在这里有了答案:

#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 modulo
1个回答
3
投票
所有C的算术运算符(仅对第一个操作数执行此操作的<<>>除外),根据语言的类型提升规则,在执行该操作之前将两个操作数都提升为相同的类型。将c(值为-1)提升为unsigned可以执行模数化,模数加该类型可表示的最大值,即1加UINT_MAX。 -1用“一加”抵消,结果为UINT_MAX,通常为4294967295。然后4294967295U % 10U当然是5。
© www.soinside.com 2019 - 2024. All rights reserved.