c - tipos - unsigned int para que sirve
TamaƱo de int y float (6)
Dos tipos con el mismo tamaño en bytes pueden tener diferentes rangos para asegurarse.
Por ejemplo, int firmado y unsigned int son ambos de 4 bytes, pero uno tiene uno de sus 32 bits reservados para el signo, lo que reduce el valor máximo en un factor de 2 de forma predeterminada. Además, el rango es diferente porque el uno puede ser negativo. Por otra parte, los flotantes pierden el rango de valores a favor de usar algunos bits para el rango decimal.
Tengo una pregunta sobre los rangos de ints y flotadores:
Si ambos tienen el mismo tamaño de 4 bytes, ¿por qué tienen diferentes rangos?
El estándar no especifica el tamaño en bytes, pero especifica rangos mínimos que varios tipos integrales deben poder mantener. Usted puede inferir el tamaño mínimo en bytes de ella.
Rangos mínimos garantizados por el estándar (de "Tipos de enteros en C y C ++"):
signed char: -127 to 127
unsigned char: 0 to 255
"plain" char: -127 to 127 or 0 to 255 (depends on default char signedness)
signed short: -32767 to 32767
unsigned short: 0 to 65535
signed int: -32767 to 32767
unsigned int: 0 to 65535
signed long: -2147483647 to 2147483647
unsigned long: 0 to 4294967295
signed long long: -9223372036854775807 to 9223372036854775807
unsigned long long: 0 to 18446744073709551615
Los valores reales del rango específico de la plataforma se encuentran en C, o en C ++ (o incluso mejor, stlated :: numeric_limits con plantilla).
Estándar solo requiere que:
sizeof(short int) <= sizeof(int) <= sizeof(long int)
float
no tiene la misma "resolución" que un int
pesar de su tamaño aparentemente similar. int
es el complemento de 2, mientras que float
se compone de 23 bits de Mantissa, 8 bits de exponente y 1 bit de signo.
Está mezclando la representación de un número , que depende de algunas reglas que usted (u otra persona) define, y la forma en que lo usa para mantener el número en la computadora (los bytes).
Por ejemplo, puede usar solo un bit para mantener un número y decidir que 0
representa -100, y 1
representa +100. O que 0
representa .5 y 1
representa 1.0. Las 2 cosas, los datos y el significado de los datos, son independientes.
Tienen diferentes rangos de valores porque sus contenidos se interpretan de manera diferente; En otras palabras, tienen diferentes representaciones .
Flotantes y dobles son típicamente representados como algo así como
+-+-------+------------------------+
| | | |
+-+-------+------------------------+
^ ^ ^
| | |
| | +--- significand
| +-- exponent
|
+---- sign bit
donde tiene 1 bit para representar el signo s (0 para positivo, 1 para negativo), un cierto número de bits para representar un exponente e , y los bits restantes para un significando, o fracción f . El valor que se está representando es s * f * 2 e .
El rango de valores que se pueden representar está determinado por el número de bits en el exponente; Cuantos más bits haya en el exponente, más amplio será el rango de valores posibles.
La precisión (informalmente, el tamaño de la brecha entre valores representables) está determinada por el número de bits en el significante. No todos los valores de punto flotante se pueden representar exactamente en un número determinado de bits. Cuantos más bits tenga en el significado, menor será la brecha entre dos valores representables.
Cada bit en el significado representa 1/2 n , donde n es el número de bits que se cuenta desde la izquierda:
110100...
^^ ^
|| |
|| +------ 1/2^4 = 0.0625
||
|+-------- 1/2^2 = 0.25
|
+--------- 1/2^1 = 0.5
------
0.8125
Aquí hay un enlace que todos deberían haber marcado: Lo que todo científico informático debe saber sobre la aritmética de punto flotante .
Un entero es solo un número ... El rango depende del número de bits (diferente para un entero con signo o sin signo).
Un número de punto flotante es una cosa completamente diferente. Es solo una convención sobre la representación de un número de punto flotante en binario ...
Está codificado con un bit de signo, un campo exponente y una mantisa.
Lee el siguiente artículo:
http://www.eosgarden.com/en/articles/float/
Le hará comprender cuáles son los valores de punto flotante, desde una perspectiva binaria. Lo entenderás lo de la gama ...
Son totalmente diferentes: por lo general, int
es solo un entero con signo de complemento a 2, mientras que float
es una representación de punto flotante de precisión única con 23 bits de mantisa, 8 bits de exponente y 1 bit de signo (consulte http://en.wikipedia.org/wiki/IEEE_754-2008 ).