代码之家  ›  专栏  ›  技术社区  ›  typeoneerror

目标C/C中数字/浮点数后的“f”

  •  94
  • typeoneerror  · 技术社区  · 16 年前

    这是什么意思 f

    CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
    

    你能解释一下我为什么不写:

    CGRect frame = CGRectMake(0, 0, 320, 50);
    
    10 回复  |  直到 6 年前
        1
  •  89
  •   Frank Shearar    16 年前
    CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
    

    CGRect frame = CGRectMake(0, 0, 320, 50);
    

    使用将自动转换为浮点数的整数。

    在这种情况下,两者之间没有(实际的)区别。

        2
  •  60
  •   epatel    16 年前

    如有疑问,请检查汇编输出。例如,写一个小的,最小的片段ie像这样

    #import <Cocoa/Cocoa.h>
    
    void test() {
      CGRect r = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
      NSLog(@"%f", r.size.width);
    }
    

    -S 选项

    gcc -S test.m
    

    将汇编输出保存在 test.s .0f 并重复编译命令。然后做一个 diff 新的 测试.s 还有上一个。我认为这应该表明是否有任何真正的差异。我觉得有太多的人 视野

        3
  •  44
  •   Potatoswatter    16 年前

    有时候是有区别的。

    float f = 0.3; /* OK, throw away bits to convert 0.3 from double to float */
    assert ( f == 0.3 ); /* not OK, f is converted from float to double
       and the value of 0.3 depends on how many bits you use to represent it. */
    assert ( f == 0.3f ); /* OK, comparing two floats, although == is finicky. */
    
        4
  •  27
  •   NickLH    14 年前

    它告诉计算机这是一个浮点数(我假设您在这里谈论的是c/c++)。如果数字后面没有f,则认为它是一个双精度或整数(取决于是否有十进制)。

    3.0f -> float
    3.0 -> double
    3 -> integer
    
        5
  •  5
  •   Hans Passant    16 年前

    顺便说一句,产生错误的几率并不是那么小。许多程序都依赖于一个构思不周的浮点比较,或者假设0.1是完全可表示的。

        6
  •  5
  •   erlando    14 年前

    这个 f 您所说的可能是为了告诉编译器它正在使用一个float。当你忽略 F

    两者都是浮点数,但是 float double .

        7
  •  3
  •   Paul R    16 年前

    这是一个C的东西-浮点文字是双精度(double)的默认值。添加一个f后缀使它们成为单精度(float)。

    您可以在这里使用int来指定值,在本例中,这没有什么区别,但是使用正确的类型是一个好习惯—一致性通常是一件好事,如果以后需要更改这些值,您一眼就能知道它们是什么类型。

        8
  •  2
  •   Wildcat    16 年前

        9
  •  1
  •   tyranid    16 年前

    它几乎肯定来自C,反映了使用“float”而不是“double”类型的愿望。它类似于后缀,比如数字上的L,表示它们是长整数。您可以只使用整数,编译器将根据需要自动转换(对于此特定场景)。

        10
  •  0
  •   Polynomial    14 年前

    float ,即浮点整数。这意味着它可以存储整数、十进制值和指数,例如。 1 0.4 或 1.2e+22 .