【发布时间】:2017-12-10 14:36:49
【问题描述】:
考虑下面的代码
char c=125;
c+=10;
printf("%d",c); //outputs -121 which is understood.
printf("%u",c); // outputs 4294967175.
printf("%u",-121); // outputs 4294967175
%d 接受负数,因此在第一种情况下输出为 -121。 案例 2 和案例 3 的输出是 4294967175。我不明白为什么?
【问题讨论】:
-
机器确实知道有一个负值,只是一个二进制值。
%u告诉代码将该二进制值解释为 unsigned。 -
前两种情况,
c被提升为int。 -
答案取决于您的编译器中
char是签名还是未签名。
标签: c format-specifiers