对于假设的浮点数或双精度值,写0.0,0.0f或.0f而不是简单的0会更好吗?
你好,一切都在标题。 这个问题特别适用于所有那些可以像NSTimeInterval
, CGFloat
或其他任何浮点或双精度的variables。 谢谢。
编辑:我要求赋值的格式不是一个string。
编辑2:问题是真的赋予一个纯粹的0
为一个浮点数或一个双最糟糕的比任何结束。
基本的区别是:
1.0
或1.
是一个双常数
1.0f
是一个浮点常量
如果没有后缀,则其中包含小数的文字(123.0)将被视为双精度浮点数。 如果您将其分配或传递给单精度variables或参数,编译器将(应该)发出警告。 追加f
告诉编译器,您希望文字被视为单精度浮点数。
如果你正在初始化一个variables,那么这是没有意义的。 编译器为你做所有的投射。
float a = 0; //Cast int 0 to float 0.0 float b = 0.0; //Cast 0.0 double to float 0.0 as by default floating point constants are double float c = 0.0f // Assigning float to float. .0f is same as 0.0f
但是如果你在expression中使用这些,那么这很有意义。
6/5 becomes 1 6/5.0 becomes 1.2 (double value) 6/5.0f becomes 1.2 (float value)
如果要挖掘出与目标CPU运行的代码或执行的二进制代码有什么不同,可以轻松地将从XCode编译代码的命令行之一复制到命令行,修复缺less的环境variables并添加-S。 由此,你会得到程序集输出,你可以用来比较。 如果将所有4个变体放在一个小的示例源文件中,则可以比较之后生成的汇编代码,即使没有stream利的ARM汇编代码。
从我的ARM汇编程序的经验(好的… 6年前和GCC),我会下注一些像XORing寄存器自己的东西,以清除它的内容为0。
无论你使用0.0,.0还是0.0f,甚至0f都没有太大的区别。 (有一些关于double和float的)你甚至可以使用(float)0。
但是0和一些浮点表示法有显着的区别。 零总是某种types的整数。 这可以强制机器执行整数操作,而您可能需要浮动操作。
我没有一个很好的例子,但总的来说,我有一个用于float / int的例子,nealy让我有一天疯了。
我习惯于8位RGB颜色这是因为我的爱好摄影师,因为我最近的HTML开发人员的背景。 所以我觉得很难习惯cocoa风格0..1分数的红色,绿色和黄色。 为了克服这个问题,我想用我曾经习惯的价值观,把它们分开255。
[CGColor colorWithRed: 128/255 green: 128/255 andYellow: 128/255];
这应该会产生一些漂亮的中间灰色。 但事实并非如此。 我所尝试的所有,无论是黑色或白色。 首先,我认为这是由于我使用这种颜色的UI文本对象的一些无证的缺陷造成的。 花了一些时间才意识到,这个常数值迫使整数运算,只能舍入到0和1。这个成果最终做了我想达到的:
[CGColor colorWithRed: 128.0/255.0 green: 128.0/255.0 andYellow: 128.0/255.0];
你可以用更less的.0s来实现同样的事情。 但是,如果需要的话,也不会伤害更多的人。 128.0f /(float)255会做。
编辑以回应您的“Edit2”:
float fvar; fvar = 0;
vs …
fvar = .0;
最后它根本没有什么区别。 fvar将包含接近(但不总是等于)0.0的浮点值。 对于编译器在60和70 fvar = 0
,我会猜想有一个小的性能问题与fvar = 0
相关联。 那就是编译器首先创build一个int 0,然后必须在赋值之前将其转换为float。 今天的现代编译器应该比旧版编译器自动优化得多。 最后,我不得不看机器码输出,看它是否有所作为。 但是, fvar = .0;
你总是在安全的网站。