printf格式,用于两个无符号整数的差值

时间:2013-06-01 22:08:16

标签: c printf ansi unsigned-integer

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

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

我在%之后放置什么才能绝对确定会打印3?我可以看到%u的两个参数(如果两个操作数都是无符号的结果)和%d(在将参数传递给int时将积分表达式转换为printf)。 / p>

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

2 个答案:

答案 0 :(得分:5)

无符号。使用%u。在积分表达式上执行默认促销时(因为printf()是一个可变参数函数),未签名的转换符号会发生

答案 1 :(得分:0)

这样

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

适用于x&lt; y,与%u不同。

虽然x-y的结果超出了signed int的范围,但它不起作用。