2011-02-07 18 views
5

me gustaría saber cuál es el differecnce entre entero de 16, Integer 32 y entero de 64, y la diferencia entre un entero con signo y un entero sin signo (NSInteger y NSUInteger)tipos NSInteger

Respuesta

11

No estoy seguro exactamente de qué tipos quiere decir "Entero 16", "Entero 32" y "Entero 64", pero normalmente, esos números se refieren al tamaño en bits del tipo entero.

La diferencia entre un entero con signo y sin signo es el rango de valores que puede representar. Por ejemplo, un entero de 16 bits con signo de complemento de dos puede representar números entre -32,768 y 32,767. Un entero de 16 bits sin signo puede representar valores entre 0 y 65.535.

Para la mayoría de los ordenadores en uso hoy en día, un entero con signo de anchura n pueden representar los valores de [-2 n -1, 2 n -1) y un entero sin signo de anchura n puede representar valores [0,2 n).

+1

Gracias por su respuesta, y sí, estaba dando un entero de 16 bits, entero de 32 bits y entero de 64 bits – Skullhouseapps

1

sin signo vs entero con signo -

Sin signo se usa generalmente cuando las variables no pueden tomar números negativos. Por ejemplo, mientras se repite una matriz, siempre es útil/legible si la variable del subíndice de la matriz no está anotada y se repite hasta la longitud de la matriz.

Por otro lado, si la variable también puede tener números negativos, declare la variable como firmada int. Las variables enteras están firmadas por defecto.

1

Eche un vistazo a Foundation Data types. NInteger y NSUInteger y typedef para int y unsigned int.

de Wikipedia

En informática indicado, número representaciones son necesarios para codificar números negativos en el número binario sistemas

lo que significa que normalmente tiene que usar un poco para codificar el firmar reduciendo así el rango de número que puede representar.

5

NSInteger y NSUInteger son tipos de datos enteros personalizados de Apple. El primero se firma mientras que el segundo no tiene firma. En las compilaciones de 32 bits, NSInteger se tipea como int mientras que en las compilaciones de 64 bits es typedef'd long. NSUInteger es typedef'd como unsigned int para 32 bits y unsigned long para 64-bit. Los tipos con signo cubren el rango [-2^(n-1), 2^(n-1)] donde n es el valor del bit y los tipos sin signo cubren el rango [0, 2^n].

Cuando se codifica para un solo programa autónomo, el uso de NSInteger o NSUInteger se considera la mejor práctica para el futuro contra los cambios de bit de la plataforma. No es la mejor práctica cuando se trata de necesidades de datos de tamaño fijo, como con formatos de archivos binarios o redes, porque los anchos de campo requeridos se definen previamente y son constantes independientemente del nivel de bits de la plataforma. Aquí es donde entran en uso los tipos de tamaño fijo definidos en stdint.h (es decir, uint8_t, uint16_t, uint32_t, etc.).