1

在纯 ANSI C (C89) 中,我有以下内容。

unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);

我在后面放什么%以绝对确定它会打印3?我可以在此处看到两者的参数%u(如果两个操作数都是,则结果是无符号的)和(将参数传递%d给时将整数表达式转换为)。intprintf

当然,两者都适用于任何合理的编译器,这正是我在这里问的原因。:-) 我有一种感觉,根据标准,只有一个是真正正确的(但即使这样也可能是错误的)。

4

2 回答 2

5

未签名。使用%u. 在对整数表达式执行默认提升时(因为printf()是可变参数函数),不会发生无符号到有符号的转换。

于 2013-06-01T22:10:06.543 回答
0

这边走

printf( "%d\n", (int)(x-y) );

它适用于 x < y,不像%u.

x-y虽然如果结果超出有符号整数的范围,它就不起作用。

于 2013-06-01T23:41:10.993 回答