2016-03-07 87 views
0

我有一个64位的设备上运行下面的代码:将CGFloat设置为double是否安全?

CGFloat myFloat = 123.45f; 
CGFloat myDouble = 123.45; 

跨32位和64位器件这样安全吗?由于CGFloat根据处理器体系结构更改大小,给定的变量是否会在两个平台上包含接近123.45的值,或者是否会由于位错误放置而导致它们炸毁?

这两件事情能发生吗?

在64位:

myFloat == 0x0000000042F6E666 == 5.5507143600000000e-315 
myDouble == 0x405EDCCCCCCCCCCD == 123.45 

在32位:

myFloat == 0x42F6E666 == 123.45 
myDouble == 0xCCCCCCCD == -1.0737418e8 

现在,我还没有在场上看到了这一点尚未...它派生我的其他问题: 为什么我在现场看不到这个问题?

回答

1

请记住,您的代码编译了两次,一次为32位,一次为64位。

当编译为32位,你的代码看起来是这样的:

float myDouble = 123.45; 

所以,回答你的问题是肯定的,编译器知道如何处理的代码,它会工作得很好。

需要注意的是64位双精度值分配给32位浮点变量时精度的损失。在这种情况下,编译器会为您提供有关精度损失的警告,但编译32位版本的代码时只会看到警告。