【问题标题】:How to evaluate a C expression with literal suffixes U L F?如何评估带有文字后缀 U L F 的 C 表达式?
【发布时间】:2021-07-06 21:55:55
【问题描述】:

我需要帮助理解下面的表达式应该如何被拦截,因为我不知道。请帮忙。

Expression: 11U/22L*(3.75F-2)+3./6+.25/1.F;
Choices:
A) 0.5       B) 0.25
C) 0.0       D) 0.75

【问题讨论】:

  • 如果您在代码中使用表达式,然后运行该代码并打印答案,您会得到什么值?
  • 我得到了 0.75。但我想知道如何在不运行代码的情况下得到这个结果。
  • 你看到11U/22L会因为整数除法而变成0吗?所以 D) 0.75 通过检查:0 + 0.5 + 0.25。 1.Ffloat,值为 1。
  • 是的。我知道了,谢谢。
  • 你知道这些后缀是什么吗?

标签: c expression evaluate


【解决方案1】:

U:无符号整数
L: 长整数
F: 浮动

整数字面量:[signed] int
FP 字面量(无后缀 f/F):double

11U / 22L * (3.75F - 2) + 3. / 6 + .25 / 1.F
-> unsigned / long * (float - int) + double / int + double / float

现在,我们需要了解operator precedencetype promotion (conversion)


然后表达式的计算结果为:

unsigned / long -> 提升为 long
*
(float - int) -> 提升为浮动
+
double / int -> 提升为 double
+
double / float -> 提升为 double


将值放入:

11U / 22L -> 0L
*
(3.75F - 2) -> 1.75F
+
3. / 6 -> 0.5
+
.25 / 1.F -> 0.25


=> 0L * 1.75F + 0.5 + 0.25

=> 0F + 0.5 + 0.25

=> 0.5 + 0.25

=> (double) 0.75

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多