【问题标题】:Is 012e2 octal or float?012e2 是八进制还是浮点数?
【发布时间】:2014-08-23 21:19:06
【问题描述】:

这应该如何用 C 语言解析?

1000 

(如果是八进制 012 * 10 ^ 2)

1200 

(如果整数为十进制)?

【问题讨论】:

  • 不知道编译器是怎么解析的,但我解析是“有人找麻烦”。
  • 那个丑陋的常数出现在哪里?顺便说一句,“八进制或浮点数”没有多大意义。八进制是文本表示; float 是一种类型。

标签: c type-conversion decimal octal


【解决方案1】:

012e2double 类型的文字,值与 1200.0 相同。

浮动常量是十进制或十六进制的浮动常量。十进制浮点常量可以以任何数字开头,包括0

(C99. 6.4.4.2 浮点常量)

decimal-floating-constant:
    fractional-constant exponent-partopt floating-suffixopt
    digit-sequence exponent-part floating-suffixopt

digit-sequence:
    digit
    digit-sequence digit

【讨论】:

  • 事实编号以0开头的不是八进制吗?
  • @Jack:仅适用于整数常量(并且作为字符常量和字符串文字语法的一部分)。
  • @Jack 没有浮点常数是十进制或十六进制
【解决方案2】:

具有指数的常数始终是浮点数。

C 中没有八进制浮点常量。(有十六进制浮点常量,但这不是其中之一)。

所以012e2 是一种不必要的混淆方式来编写1200.0

(我想不出用这种方式写它的充分理由,除非有意故意混淆。)

【讨论】:

  • 关于:我想不出什么好理由... 可以由代码生成例程创建,并以这种方式格式化以与某些模板保持一致。 (也许在 1970 年代或 80 年代,当时混淆对某些人来说是一种运动)
  • @ryyker:也许需要 3 位有效数字且没有小数点——尽管 120e1 会和 good 一样糟糕。 (是的,我知道特定标记在 cmets 中不起作用。)
猜你喜欢
  • 2014-07-24
  • 2011-10-17
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2019-04-16
  • 2013-05-07
  • 2013-06-09
相关资源
最近更新 更多