我经常看到这个:
CGFloat someCGFloat = 1.2f;
为什么使用“f”?如果 CGFloat
定义为 float
,则该值将被转换为 float
,如果 CGFloat
是定义为 double
,该值将被转换为 double
。
是否只是为了确保不会发生从double
到float
的转换?这样做有什么意义?另外,编译器不会处理这个问题吗?
编辑:嗯……接受哪个答案……都很好!
最佳答案
1.0 默认为 double,如果正确的值为 1.2,则存在隐式转换,并且值从 double 转换为 float(转换不是运行时操作)。在这种情况下,将其称为 1.2f 并不重要。程序员大多滥用它,但在某些情况下它确实很重要。
例如:
float var= 1.0e-45;
NSLog(@"%d",var==1.0e-45);
这会打印出零,因为 1.0e-45 太小而无法存储到单精度浮点变量中,所以它变为零。编写 var==1.0e-45f 会改变结果。
使用格式说明符主要是在编写表达式时很重要,并且由于左值是 float ,因此您希望表达式也被视为 float ,但事实并非如此。
一个更引人注目的例子是在一个数字上使用 l 格式说明符,这个数字被移位太多以至于变成零,并且对结果感到惊讶:
long var= 1<<32; // I assume that an int takes 4 bytes and a long 8 bytes
结果为零,写入 1l<<32 会完全改变结果。
关于ios - 为 CGFloat 赋值时使用 'f' 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581535/