Битовые битовые операции над 64-битными целыми числами на iPhone 4 и 5?

У меня довольно интересная проблема. Я пишу шахматный движок с использованием битбордов для iOS 7, который я хочу работать на iPhone 4, 4s, 5 и 5s. До сих пор я проводил все свои испытания в симуляторе iOS 64bit для iPhone, но решил запустить его на своем телефоне, и все черные фигуры отсутствовали. Я быстро понял, что это потому, что мой iPhone - это iPhone 5, и я думаю, что у него есть некоторые проблемы с побитовыми операциями на 64-битных числах. Есть ли какие-либо обходные пути, которые я могу использовать, чтобы заставить это приложение работать на iPhone 4, 4s и 5? Или я должен сделать этот iPhone 5S-только? Было бы довольно неприятно, если бы это было так.

Обновление: После дальнейшего изучения я определил, что проблема в том, что, хотя все мои явно указанные типы являются длинными целыми числами без знака, потому что я храню их коллекции в nsarrays как литералы объекта, когда я вызываю integerValue после вызова objectForKey, это возвращает NSInteger. Однако на 32-битных телефонах NSInteger - это 32-битная, когда мне нужно 64. Есть ли способ хранить и извлекать 64-битные целые числа в NSArray и из него?

1 ответ

Хорошо, я наконец понял, что происходит. Я хранил коллекции битбордов в виде nsnumbers в nsarrays и использовал integerValue для их вывода. Это работало нормально на 64-битных устройствах, потому что integerValue возвращает nsinteger, который представляет собой 32 или 64-битное целое число, основанное на процессоре. Как только я изменил все вызовы функций на unsignedLongLongValue, это сработало как шарм.

Другие вопросы по тегам