【问题标题】:Erratic printing by printf [closed]printf 打印不稳定 [关闭]
【发布时间】:2018-09-02 14:55:11
【问题描述】:

下面的代码sn-ps虽然大同小异,但给出的答案不同

#include <stdio.h>
int main() {
  signed char c = -128;
  c = -c;
  printf("%d", c);.  //-128
  return 0;
}

还有:

#include <stdio.h>
int main() {
  signed char c = -128;
  printf("%d", -c);.  //expected -128 but got 128
  return 0;
}

printf 可以进行内部类型转换吗?

【问题讨论】:

  • 在后一种情况下,-c 被提升为int
  • 这可能是 C 未定义的行为。
  • 只是为了补充@YiFei的评论:c = -c;c = (signed char)(-(int)c);相同,printf("%d\n", -c);printf("%d\n", -(int)c);相同
  • 如果你启用了所有推荐的警告,你的编译器就会清楚这一点。注意:在询问之前建议启用和修复警告..

标签: c printf


【解决方案1】:

有符号类型的下溢/溢出是未定义的行为,你不应该依赖它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2020-09-26
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多