【问题标题】:Why is the result of -5/2 being printed as 0? [duplicate]为什么 -5/2 的结果打印为 0? [复制]
【发布时间】:2021-08-02 11:49:38
【问题描述】:

你能说出为什么 C 中的这条语句输出 0 吗

printf("Hello %f",-5/2);

printf("Hello %d",-5/2);

输出为 -2

【问题讨论】:

  • 两个整数相除时输出的类型是什么?
  • 这里:printf("Hello %f",-5/2); 导致 UB。阅读 C 标准中 printf() 的规范或阅读 printf() 的手册页。

标签: c


【解决方案1】:

两个整数相除产生一个整数结果(在这种情况下为int)。 %f 格式说明符需要 double 类型的参数。对给定的参数使用错误的格式说明符会触发undefined behavior,在这种情况下会给你一个不正确的结果。

如果你想要一个浮点结果,/ 的至少一个操作数必须是浮点类型,即

printf("Hello %f",-5.0/2);

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多