在纯ANSI C(C89)中,我有以下内容。
unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);
我在%
之后放置什么才能绝对确定会打印3
?我可以看到%u
的两个参数(如果两个操作数都是无符号的结果)和%d
(在将参数传递给int
时将积分表达式转换为printf
)。 / p>
当然两者都适用于任何合理的编译器,这正是我在这里问的原因。 :-)我感觉只有一个是非常正确的标准(但即使这可能是错误的)。
答案 0 :(得分:5)
无符号。使用%u
。在积分表达式上执行默认促销时(因为printf()
是一个可变参数函数),未签名的转换符号会发生不。
答案 1 :(得分:0)
这样
printf( "%d\n", (int)(x-y) );
适用于x&lt; y,与%u
不同。
虽然x-y
的结果超出了signed int的范围,但它不起作用。