2015-10-21 2 views
-2

Я пытаюсь использовать очень большое значение (10 Trillin), однако при запуске приложения на iPhone 4s оно меняет значение до 1,575,856,128. Однако он отлично работает на iPhone 5 и выше.Xcode. Неявное преобразование из длинного длинного в длинное изменение значения от 10 000 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

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

в 32-битной среде, если вы передадите длинное значение, которое больше 2147483647 (< 10000000000000). он будет усечен

но длинный длинный составляет 8 байт в 32-битной/64-битной среде (так можно сохранить значение Шифрование до 9223372036854775807)

Смежные вопросы