2015-10-21 61 views
-2

我試圖使用非常大的值(10 Trillin),但它在iPhone 4s上運行應用程序時將值更改爲1,575,856,128。不過,它在iPhone 5及更高版本上運行良好。Xcode-從long long到long的隱式轉換值從10,000,000,000,000到1,575,856,128

我所做的只是申報

long number1; 

然後將其設置等於值

number1 = 10000000000000 
+4

變化'number1'到'長long'取代'長'。 – rmaddy

+0

現在的問題是,我試圖使用NSUserDefaults存儲此值,現在我得到隱式轉換失去了整數精度。 NSUserDefaults是否不存儲正確的數字? – FifthRBM

+1

'NSUserDefaults'不直接支持long long值。你可以把'long long'包裝在'NSNumber'中,並將'NSNumber'存儲在'NSUserDefaults'中。 – rmaddy

回答

0

這取決於設備的總線頻率和寬度是32位/ 64位。

  • 在32位環境是4個字節,長最大正值= 2^32/2 - 1 = 2147483647

  • 在64位環境是8字節,long的最大正值= 2^64/2 - 1 = 9223372036854775807

請參閱:https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Major64-BitChanges/Major64-BitChanges.html

在32位環境中,如果您傳遞的值長於2147483647(< 10000000000000)。它會被截斷

長長是在32位/ 64位環境8個字節(因此能保持值高達9223372036854775807)