我在64位设备上运行以下代码:
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
现在,我还没有在现场看到这个......这产生了我的另一个问题:为什么我没有在现场看到这个问题?
答案 0 :(得分:1)
请记住,您的代码被编译两次,一次用于32位,一次用于64位。
编译32位时,代码如下所示:
float myDouble = 123.45;
所以,你的问题的答案是肯定的,编译器知道如何处理该代码,它会正常工作。
当需要注意的是将64位双精度值分配给32位浮点变量时的精度损失。在这种情况下,编译器将为您生成有关精度损失的警告,但在编译32位版本的代码时只会看到警告。