我正在尝试在我编写的某些代码中在int
和unsigned int
之间进行隐式类型转换。编译器给出了意外结果。
根据有符号和无符号整数(相等秩)之间隐式转换的规则,代码应产生一个较大的正数作为其输出。
unsigned int q = 90;
int w = -1;
printf("q+w=%u\n", q + w);
作为该程序的输出,您可以查看here,结果是89。我希望在进行算术运算之前,int w
会被强制转换为类型unsigned int
。 ,并产生预期的结果。
答案 0 :(得分:1)
-1
被转换为UINT_MAX
(转换为无符号的正式规则是您repeatedly add or subtract the maximum+1 until the result fits (6.3.1.3p2))。 UINT_MAX+90 == 89
。