隐式类型转换的意外结果
Unexpected Result for Implicit Type Conversion
我试图在我编写的某些代码中引起 int
和 unsigned 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
.
我试图在我编写的某些代码中引起 int
和 unsigned 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
.