2011-02-07 13 views
5

vorrei sapere qual è la differecnce tra Integer 16, Integer 32 e intero a 64, e la differenza tra un intero con segno e un intero senza segno (NSInteger e NSUInteger)tipi NSInteger

risposta

11

Non sono sicuro di quale tipo si intenda per "Integer 16", "Integer 32" e "Integer 64", ma in genere questi numeri si riferiscono alla dimensione in bit del tipo intero.

La differenza tra un numero intero con segno e senza segno è l'intervallo di valori che può rappresentare. Ad esempio, un intero a 16 bit con complemento a due complementi può rappresentare numeri compresi tra -32.768 e 32.767. Un numero intero a 16 bit senza segno può rappresentare valori compresi tra 0 e 65.535.

Per la maggior parte dei computer in uso oggi, un intero con segno di larghezza n può rappresentare i valori [-2 n -1, 2 n -1) e un intero senza segno di larghezza n può rappresentare valori [0,2 n).

+1

Grazie per la risposta, e sì, intendevo un numero intero a 16 bit, numero intero a 32 bit e numero intero a 64 bit – Skullhouseapps

1

Unsigned vs intero con segno -

Non firmato viene in genere utilizzato dove le variabili non sono autorizzati a prendere numeri negativi. Ad esempio, durante il looping di un array, è sempre utile/leggibile se la variabile del pedice di array è unsigned e loop-through fino alla lunghezza dell'array.

D'altra parte, se la variabile può avere anche numeri negativi quindi dichiarare la variabile come firmata int. Le variabili intere sono firmate per impostazione predefinita.

1

Dai un'occhiata allo Foundation Data types. NInteger e NSUInteger e typedef per int e unsigned int.

Da wikipedia

In informatica, il numero firmato rappresentazioni sono necessari per codificare numeri negativi in ​​numero binario sistemi

il che significa che si deve normalmente usare un po 'per codificare il firmare riducendo così l'intervallo di numero che puoi rappresentare.

5

NSInteger e NSUInteger sono tipi di dati interi personalizzati di Apple. Il primo è firmato mentre il secondo non è firmato. Su build a 32 bit, NSInteger è typedef'd come int mentre su build a 64 bit è tipicamente lungo. NSUInteger è typedef'd come unsigned int per 32-bit e unsigned long per 64-bit. I tipi firmati coprono l'intervallo [-2^(n-1), 2^(n-1)] dove n è il valore del bit e i tipi senza segno coprono l'intervallo [0, 2^n].

Durante la codifica per un singolo programma autonomo, l'utilizzo di NSInteger o NSUInteger è considerato la migliore procedura per la protezione futura contro le modifiche ai bit della piattaforma. Non è la migliore pratica quando si ha a che fare con esigenze di dati a dimensione fissa, come con formati di file binari o reti, poiché le larghezze di campo richieste sono definite in precedenza e costanti indipendentemente dal livello di bit della piattaforma. È qui che entrano in uso i tipi di dimensione fissa definiti in stdint.h (cioè, uint8_t, uint16_t, uint32_t, ecc.).

Problemi correlati