ios - 为 CGFloat 赋值时使用 'f' 有什么意义?

标签 ios objective-c macos cocoa-touch cocoa

我经常看到这个:

CGFloat someCGFloat = 1.2f;

为什么使用“f”?如果 CGFloat 定义为 float,则该值将被转换为 float,如果 CGFloat 是定义为 double,该值将被转换为 double

是否只是为了确保不会发生从doublefloat 的转换?这样做有什么意义?另外,编译器不会处理这个问题吗?

编辑:嗯……接受哪个答案……都很好!

最佳答案

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/

相关文章:

ios - Swift stderr 和 stout 到单个文件

ios - Access-Control-Allow-Origin 不允许 WKWebview Origin null

ios - UICollectionViewCell 到 tvOS 中的 UIButton 焦点

ios - 估计信标 IOS - 仅使用 UUID 值搜索信标

ios - 从数组中获取内容并在 UILabel 中显示

ios - TableView 动态行高未被调用

ios - NSUserDefaults 在 iOS 8 中不可靠

macos - NSImageView 图像纵横比填充?

macos - iTerm2 中的 vim 颜色错误

c++ - 如何在Mac OS X上安装ruby-filemagic?