2011-01-25 13 views

risposta

81

Il valore massimo di un NSInteger è NSIntegerMax.

+14

+1 e il valore di NSIntegerMax è LONG_MAX. –

+7

@Mark: su * current * implementazioni. Le future implementazioni potrebbero teoricamente scegliere un valore diverso, anche se non si spera. –

+1

@Cfr: Grazie per il collegamento, ma quel numero non è giusto. Sui sistemi a 32 bit, NSInteger non può rappresentare 4294967295 (il numero che hai dato è il valore massimo di un ** intero senza segno a 32 bit), e nei sistemi a 64 bit può andare molto più in alto di quello. – Chuck

1

per 32 bit & 64 bit, esistono due convenzioni: a) ILP32 b) LP64

Il runtime a 32 bit utilizza una convenzione denominata ILP32, in cui numeri interi, interi lunghi e puntatori sono quantità a 32 bit. Il runtime a 64 bit utilizza la convenzione LP64; gli interi sono quantità a 32 bit e interi lunghi e puntatori sono quantità a 64 bit. Queste convenzioni corrispondono all'ABI per le app in esecuzione su OS X (e analogamente, le convenzioni di Cocoa Touch corrispondono ai tipi di dati utilizzati in Cocoa), rendendo facile la scrittura di codice interoperabile tra i due sistemi operativi.

Tabella 1-1 tutti i tipi interi comunemente utilizzati nel codice Objective-C. Ogni voce include la dimensione del tipo di dati e il suo allineamento previsto in memoria. Le voci della tabella evidenziate indicano i punti in cui la convenzione LP64 differisce dalla convenzione ILP32. Queste differenze di dimensioni indicano le posizioni in cui il comportamento del codice cambia quando compilato per il runtime a 64 bit. Il compilatore definisce la macro LP64 durante la compilazione per il runtime a 64 bit.

enter image description here

per 64 bit gamma max per NSInteger è: LONG_MAX: 9223372036854775807

Problemi correlati