2016-03-07 114 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位版本的代碼時只會看到警告。

相關問題