2011-01-25 21 views

Odpowiedz

81

Maksymalna wartość NSInteger to NSIntegerMax.

+14

+1 i wartość NSIntegerMax jest LONG_MAX. –

+7

@ Mark: on * current * implementations. Przyszłe wdrożenia mogłyby wyłonić inną wartość, choć nie ma takiej nadziei. –

+1

@Cfr: Dzięki za link, ale ta liczba jest nieprawidłowa. W systemach 32-bitowych NSInteger nie może reprezentować 4294967295 (podana liczba jest maksymalną wartością ** niepodpisanej ** 32-bitowej liczby całkowitej), a w systemach 64-bitowych może być dużo wyższa. – Chuck

1

dla 32-bitowych & 64 bitów, nie ma dwie konwencje: a) ILP32 b) LP64

32-bitowe środowisko wykonawcze używa konwencji zwanej ILP32, w której liczby całkowite, długie liczby całkowite i wskaźniki są wielkościami 32-bitowymi. 64-bitowe środowisko wykonawcze używa konwencji LP64; liczby całkowite są wielkościami 32-bitowymi, a długie liczby całkowite i wskaźniki są wielkościami 64-bitowymi. Te konwencje pasują do ABI dla aplikacji działających na OS X (podobnie konwencje Cocoa Touch pasują do typów danych używanych w Cocoa), co ułatwia pisanie interoperacyjnego kodu między dwoma systemami operacyjnymi.

Tabela 1-1 wszystkich typów całkowitych powszechnie używanych w kodzie celu C. Każda pozycja zawiera rozmiar typu danych i oczekiwane wyrównanie w pamięci. Wyróżnione wpisy w tabeli wskazują miejsca, w których konwencja LP64 różni się od konwencji ILP32. Te różnice wielkości wskazują miejsca, w których zmienia się zachowanie twojego kodu podczas kompilacji dla 64-bitowego środowiska wykonawczego. Kompilator definiuje makro LP64 podczas kompilowania dla 64-bitowego środowiska wykonawczego.

enter image description here

do 64 bitów max zakresu dla NSInteger jest: LONG_MAX: 9223372036854775807

Powiązane problemy