隐式类型转换的意外结果

Unexpected Result for Implicit Type Conversion

我试图在我编写的某些代码中引起 intunsigned int 之间的隐式类型转换。编译器给出了意外的结果。

根据有符号和无符号整数(等阶)之间的隐式转换规则,代码应产生一个大的正数作为其输出。

unsigned int q = 90;
int w = -1;
printf("q+w=%u\n", q + w);

作为此程序的输出,您可以查看 here,结果是 89。我希望 int w 在算术发生之前被强制转换为类型 unsigned int ,但是,并产生预期的结果。

-1 被转换为 UINT_MAX(转换为无符号数的正式规则是 repeatedly add or subtract the maximum+1 until the result fits (6.3.1.3p2))。 UINT_MAX+90 == 89.