无符号的int表示

时间:2014-05-28 19:21:22

标签: c++ c

 main() {

       unsigned int a=-9;
       printf("%d",a);//gives output -9


       cout<<a;// gives output 9429967287
       getch();

   }

为什么它在两种情况下都会提供不同的输出?

'printf'和'cout'是否以不同的方式处理位模式?

为什么'printf'没有给出肯定答案?

3 个答案:

答案 0 :(得分:12)

因为您告诉它:%d用于将参数打印为 signed int。要打印unsigned int,您应该使用%u

答案 1 :(得分:6)

%d格式说明符printf表示参数为int,而不是unsigned int。因此printf认为aint,这就是它打印出负值的原因。

答案 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;