main() {
unsigned int a=-9;
printf("%d",a);//gives output -9
cout<<a;// gives output 9429967287
getch();
}
为什么它在两种情况下都会提供不同的输出?
'printf'和'cout'是否以不同的方式处理位模式?
为什么'printf'没有给出肯定答案?
答案 0 :(得分:12)
因为您告诉它:%d
用于将参数打印为 signed int。要打印unsigned int,您应该使用%u
。
答案 1 :(得分:6)
%d
格式说明符printf
表示参数为int
,而不是unsigned int
。因此printf
认为a
是int
,这就是它打印出负值的原因。
答案 2 :(得分:4)
如果您在printf中使用格式说明符%u
,您将得到与运算符&lt;&lt;相同的结果。 printf中的说明符%d
强制printf将相应的参数解释为int类型而不是unsigned int。
事实上,如果你要写
,它也是一样的unsigned int x = -1;
std::cout << x << std::endl;
std::cout << -1 << std::endl;