【问题标题】:Alternate method for typecasting in C?在 C 中进行类型转换的替代方法?
【发布时间】:2010-10-07 13:19:31
【问题描述】:

我在一些代码中遇到了这一行,但在任何地方都找不到定义的语法:

*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */

如果我从 .04f 中删除 f ,则编译器会发出警告,指出由于从'double' 转换为'float' 可能导致数据丢失。我假设 f 正在进行某种类型转换。

有人见过这个吗?这是在 C 标准中的什么地方定义的?

【问题讨论】:

    标签: c string


    【解决方案1】:

    究竟是什么问题?您的编译器会在 .04f 上阻塞吗?试试

    (float) .04
    

    【讨论】:

    • 不,它编译得很好。我以前从未见过这种语法,想确保我理解它。
    【解决方案2】:

    没有“f”,数量 0.04 是双精度数。当您将 lImportHeight 与双精度数相乘时,您将获得另一个双精度数。然后你将它存储在一个浮点大小的内存位置,失去精度。对于“f”,0.04f 是一个浮点字面量。你用它多个 lImportHeight ,你得到一个浮点数;那么分配不会导致精度损失。

    【讨论】:

      【解决方案3】:

      不知道它在标准中的定义,但您使用f 来表示浮点数,否则编译器会假定它是双精度数。类似地,您可以通过添加 u 或 long 通过 l(小写 ell)等来指定要无符号的整数。

      【讨论】:

        【解决方案4】:

        后面的 f 向编译器表明它是一个浮点类型的字面量,就像 "" 表示一个字面量字符串,而 L 后缀表示一个长整数。

        C++ spec for literals 是一样的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-06
          • 2011-09-25
          • 1970-01-01
          • 1970-01-01
          • 2015-11-29
          • 2011-07-05
          相关资源
          最近更新 更多