Cómo recordar los valores máximos de int corto, largo con signo y sin signo, flotante, doble en C ++

Primero, C y C ++ no tienen un valor máximo fijo para ningún tipo de datos. Solo definen el rango mínimo requerido para los tipos. Por ejemplo, INT_MAX debe ser igual o mayor que 32767, CHAR_BIT debe ser igual o mayor que 8 … Por lo tanto, debe leer el documento del compilador o el archivo de ascenso para conocer el valor exacto.

Hoy en día, casi todas las computadoras tienen 32 bits int, que pueden almacenar valores desde [matemática] -2 ^ {31} [/ matemática] a [matemática] 2 ^ {31} -1 [/ matemática], y solo necesita saber que son alrededor de 2 mil millones ([matemáticas] 2 ^ {31} = 2 ^ {10} \ veces 2 ^ {10} \ veces 2 ^ {10} \ veces 2 \ aprox 10 ^ 3 \ veces 10 ^ 3 \ veces 10 ^ 3 \ veces 2 \ aproximadamente 2 mil millones [/ matemática]. Para valores menores que eso, debe recordar al menos potencias de 2 hasta [matemática] 2 ^ {16} [/ matemática], lo cual es muy fácil.

Para flotantes y dobles, rara vez trabajará con valores que sean tan grandes como los valores máximos, así que recuerde que el estándar requiere que flotante, doble y doble largo deben poder almacenar valores al menos [matemática] 10 ^ {- 37 } [/ matemática] a [matemática] 10 ^ {37} [/ matemática]. Los límites en el estándar IEEE-754 son 3.40282347E + 38F y 1.7976931348623157E + 308 para precisión simple y doble respectivamente. A menudo, solo los exponentes (38 y 308) son relevantes, los significados no necesitan recordarse exactamente ya que no cambian mucho el grado.

En general, no recuerdo el valor en sí, sino el ancho de bits.
Sé que los int tienen al menos 16 bits de ancho, dependiendo de la arquitectura. En la mayoría de los casos actuales, son de 32 bits. Se garantiza que los largos tienen al menos 32 bits, en arquitecturas de 64 bits creo que suelen ser de 64 bits. Se garantiza que los largos largos no serán menos de 64 bits. Etc. Esos números son más fáciles de recordar. Aún mejor, use enteros de ancho fijo, como int32_t.
Con el ancho de bits presente, puede deducir sus propiedades.
Puede representar 2 ^ n valores diferentes con un número entero de ancho n. Si no está firmado, esto significa que puede representar todo el rango [0..2 ^ n). Si está firmado, la mitad de ellos se usará para representar números negativos, por lo que tendrá el rango [2 ^ (n-1) .. 2 ^ (n-1)). Recuerde que los paréntesis representan “hasta pero sin incluir”, por lo que estos rangos son equivalentes a [0 .. (2 ^ n) -1] y [2 ^ (n-1) .. (2 ^ (n-1) ) -1].

Esos números varían entre los compiladores, especialmente los antiguos o los compiladores para procesadores integrados, por lo que memorizar un conjunto de números no es muy útil.

Por lo general, hay un archivo de inclusión que define macros que definen esos valores para el compilador asociado con ese directorio de archivo de inclusión.

O puede imprimir los números usted mismo, con algunas reservas.

largo largo int cero = 0;
int más grande = (~ cero) >> 1; // que podría ser el int más alto

Es una buena idea memorizar las potencias de dos, al menos hasta 2 ^ 24. Con el tiempo comienza a recordar los rangos de varios tipos de datos.

La gente puede seguir insistiendo en la portabilidad, pero el 99% de nosotros escribimos para x86 en modo de 32 bits. Entonces, lo más probable es que un corto sin signo sea de 16 bits y int sea de 32 bits.
El 99% de las veces no desbordará un entero de 32 bits. Solo tenga cuidado cuando multiplique dos números de 32 bits.
Cambie a 64 bits si maneja grandes cantidades de cosas.

flotador y doble, debes tener mucho cuidado. El punto flotante es el diablo.
Es posible que
(f+1) == f
Si f es un número de coma flotante.

Varían entre arquitecturas y compiladores, por lo que no hay un número que memorizar.
De hecho, la Guía de estilo C ++ de Google dice que solo debe usar int, o:

Si un programa necesita una variable de un tamaño diferente, use un tipo entero de ancho preciso de .

Marca esta pagina

(límites.h)

Y recuerda lo que llamaste el marcador.

No creo que necesites conocerlos con precisión.

Por ejemplo, cuando está pensando en el código, debería ser suficiente pensar en hasta 2 mil millones.
Cuando escriba su código, debe usar las constantes de los límites.

La forma en que ha recordado el valor de pi hasta 30 lugares decimales 🙂

More Interesting

¿Es Interview Cake el mejor recurso para codificar preguntas de entrevistas en 2017?

¿Construir un sitio web de comercio electrónico decente (back-end + front-end) es lo suficientemente impresionante como para incluir un currículum / CV para una pasantía en una empresa de alta tecnología?

Cómo prepararse para una entrevista Java con 15 meses de experiencia

C ++ (lenguaje de programación): ¿Cómo puedo usar BST para encontrar el elemento mayoritario en una matriz sin clasificar?

¿Qué se cumple en el medio algoritmo wrt programación competitiva?

¿Cómo es la entrevista telefónica de Google?

¿Qué tipo de preguntas se harán durante las entrevistas de TI para otros estudiantes de la rama?

Quiero prepararme para mis rondas de entrevistas técnicas por JP Morgan (sucursal de Mumbai). ¿Qué preguntas hace JP Morgan para un desarrollador Java experimentado de 5 años?

Soy estudiante de ECE de primer año. Me voy a preparar mucho para una programación competitiva. ¿Google me considerará y me brindará una oportunidad de entrevista?

Si me estoy preparando para una entrevista tecnológica, ¿cuál sería el mayor beneficio: HackerRank, LeetCode o InterviewBit? ¿Qué distingue estos tres sitios?

¿Cómo prepararse para el recorrido por el campus de Wipro? Qué tipo de preguntas se harán

Si descifras la entrevista de Google por pura suerte de obtener solo preguntas fáciles, ¿qué pasará contigo a la larga? ¿Eventualmente prosperarás o te las arreglarás?

Parece que no puedo precisar el aspecto técnico de una entrevista de desarrollador de software. Tengo las habilidades pero lucho con la codificación de pizarra. ¿Algún consejo?

¿Qué algoritmos de la geometría computacional son esenciales en la programación de entrevistas?

¿Qué temas gráficos debo estudiar para estar adecuadamente preparado para una entrevista con un ingeniero de software de Google? ¿Valdría la pena estudiar también algoritmos para árboles de expansión mínima, flujos de red máximos, coincidencia bipartita, etc.?