¿Cuál es el valor máximo para un int32?

1380

Nunca puedo recordar el número. Necesito una regla de memoria.

Flinkman
fuente
48
sin signo: 2³²-1 = 4 · 1024³-1; firmado: -2³¹ .. + 2³¹-1, porque el bit de signo es el bit más alto. Simplemente aprenda 2⁰ = 1 a 2¹⁰ = 1024 y combine. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad el
31
Generalmente recuerdo que cada 3 bits es aproximadamente un dígito decimal. Esto me lleva al orden de magnitud correcto: 32 bits son 10 dígitos.
Barmar
8
@JoachimSauer ciertamente puede ayudar a depurar si aprende a reconocer al menos este tipo de números.
Dunaril
72
"si un disco se llena, se eliminarán todos los mbytes" (2 letras, 1 letra, 4 letras, 7 letras, 4 letras, 8 letras, 3 letras, 6 letras, 4 letras, 7 letras)
UltraCommit
8
Un caso, cuando el int32 no es suficiente: bbc.com/news/world-asia-30288542
ingaham

Respuestas:

5073

Son 2,147,483,647. La forma más fácil de memorizarlo es a través de un tatuaje.

Ben Hoffstein
fuente
83
Mi mnemotécnico: 2 ^ 10 está muy cerca de 1000, por lo que 2 ^ (3 * 10) es 1000 ^ 3 o aproximadamente 1 billón. Uno de los 32 bits se usa para firmar, por lo que el valor máximo es realmente solo 2 ^ 31, que es aproximadamente el doble de la cantidad que obtienes por 2 ^ (3 * 10): 2 mil millones.
16807
164
2147483647 sin comas.
Vern D.
20
Simplemente use: Integer.MAX_VALUEen Java.
Tim
184
Si tienes el tatuaje en la cara, no olvides invertirlo para que se lea correctamente en el espejo. De lo contrario, verá 746,384,741,2 que está mal y sería vergonzoso.
Larry S
127
2,147,483,647 = 0x7FFFFFFF, si quieres recordarlo, solo usa hexadecimal.
roottraveller
493

La respuesta más correcta que se me ocurre es Int32.MaxValue.

Adrian Clark
fuente
18
Antes de que esto existiera, solía #definir INT32_MIN e INT32_MAX en todos mis proyectos.
WildJoe
45
@CamiloMartin Hola. Me molesta eso. Simplemente no había lugar para más tatuajes. Obviamente, el conjunto de caracteres iso-8859-1, y Pi a decimales 31415 tuvieron que tener prioridad
sehe
3
Cuando está programando: sí en el 99% de los casos. Pero es posible que desee saber que es algo así como ~ 2 mil millones para planificar enfoques de programación o cuando se trabaja con datos, aunque es un número muy grande. :)
Andre Figueiredo
@sehe ¿Ya no es obsoleto latin1 / Windows 1252? Si no puede caber en los 7 bytes de ASCII, no creo que merezca un lugar en la memoria principal. Quiero decir ... todas las páginas de códigos de UNICODE son un poco útiles, pero más de un espacio de skin parece un desperdicio. (Sin mencionar que todavía no incluye glifos descriptivos para "pageup / pagedown" o "pagehome / pageend")
1
Esta propiedad podría ser un buen consejo además de mencionar el número correcto. Sin embargo, no me gusta esta respuesta, ya que solo menciona una forma inportable de determinar el valor y tampoco menciona para qué lenguajes de programación funciona ...
mozzbozz
439

Si cree que el valor es demasiado difícil de recordar en la base 10, intente la base 2: 1111111111111111111111111111111

Cuajada
fuente
145
@Nick Whaley: No, 1111111111111111111111111111111 es positivo. 11111111111111111111111111111111 sería negativo :-)
Curd
58
Base 16 es aún más fácil 7FFFFFFF
Nelson Galdeman Graziano
34
@Curd 11111111111111111111111111111111como número de base 2 aún sería positivo (un ejemplo negativo en base-2 sería -1) . Esa secuencia de bits solo es negativa si representa un número de complemento de 2 de 32 bits :)
BlueRaja - Danny Pflughoeft
143
La más fácil de recordar será la base 2,147,483,647. Entonces todo lo que tienes que recordar es 1.
big_tommy_7bb
82
@ tim_barber_7BB en realidad, son las 10.
fscheidl
317

si puede recordar todo el número Pi, entonces el número que está buscando está en la posición 1,867,996,680 hasta 1,867,996,689 de los dígitos decimales de Pi

La cadena numérica 2147483647 aparece en el dígito decimal 1,867,996,680 de Pi. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

fuente: http://www.subidiom.com/pi/

Diamantatos Paraskevas
fuente
30
ya sabes, cuando comencé a leer tu respuesta, esperaba algo práctico, como el dígito 20.
JqueryToAddNumbers
95
Esto parece muy bueno. ¿Tienes otra regla de memoria para recordar 1,867,996,680? Me resulta difícil recordar en qué índice empezar a buscar ...
Alderath
10
" si puedes recordar todo el número de Pi ... " - no, no puedes, es irracional {como posiblemente haya una o dos publicaciones en este Q & As} 8-D
SlySven
10
@Alderath Normalmente lo recuerdo como los 10 decimales en sqrt (2) comenzando en el número de dígito 380,630,713 ...
Henrik
2
@Alderath: la cadena numérica 1867996680 aparece en el 380,630,713º dígito decimal de la raíz cuadrada de 2.
Yair Halberstadt
290

Son 10 dígitos, así que imagina que es un número de teléfono (suponiendo que estés en los EE. UU.). 214-748-3647. No recomiendo llamarlo.

WildJoe
fuente
13
Hablando de recordarlo como un número de teléfono, parece que puede haber algunos spammers telefónicos que lo usan: mrnumber.com/1-214-748-3647
Steven
8
"No hay intercambio" 748 "en Dallas. Este número es falso". - desde la página enlazada por shambleh
Tarnay Kálmán
104
@ Steven, no creo que sean spammers, solo personas que accidentalmente almacenaron el número de teléfono como en INTlugar de VARCHARen MySQL.
Zarel
8
Intenté llamarlo. Sonó un par de veces y luego fue al tono de marcación de error. = (
Krythic
172

En lugar de pensarlo como un gran número, intente desglosarlo y buscar ideas asociadas, por ejemplo:

  • 2 descansos máximos de billar (un descanso máximo es 147)
  • 4 años (48 meses)
  • 3 años (36 meses)
  • 4 años (48 meses)

Lo anterior se aplica al mayor número negativo; positivo es eso menos uno.

Tal vez el desglose anterior no sea más memorable para usted (¡no es emocionante!), ¡Pero espero que pueda tener algunas ideas que sí lo sean!

Luke Bennett
fuente
99
Ese es uno de los dispositivos mneumónicos más complicados que he visto. Impresionante.
Ben Hoffstein
99
Je, los gustos de Derren Brown en realidad abogan por este tipo de enfoque: dividir un número en algo al azar, pero que es más memorable que solo una carga de números: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/…
Luke Bennett
19
Tengo una mejor mnemónica: todo lo que necesitas recordar son 2 y 31, ¡ya que aparentemente es exactamente 2 ^ 31! Oh, espera ...
Tamas Czinege
28
@DrJokepu No estoy seguro de la precedencia del operador ... ¿Eso significa 2^(31!)o (2^31)!?
Alderath
1
@Lucio Tenga en cuenta que mi respuesta se relaciona en primera instancia con el mayor número negativo que termina en 48, no en 47
Luke Bennett
144

Mayor valor negativo (32 bits): -2147483648
(1 << 31)

Mayor valor positivo (32 bits): 2147483647
~ (1 << 31)

Mnemónico: "borracho también conocido como cachondo"

drunk ========= Drinking age is 21
AK ============ AK 47
A ============= 4 (A and 4 look the same)
horny ========= internet rule 34 (if it exists, there's 18+ material of it) 

21 47 4(years) 3(years) 4(years)
21 47 48       36       48
Aaren Cordova
fuente
27
Los mundos más difíciles de recordar Mnemonic. Si puede memorizar 0118 999 88199 9119 752 ... 3 puede memorizar esto.
BenM
11
@Rondles Creo que en realidad es 7253 al final.
Tim Tisdall
21
No La edad para beber es 18 años ... Parece que no puedo usar esta mnemónica, mi vida está arruinada.
Joffrey
44
@Aaren Cordova Solían decir que stackoverflow nunca será divertido, no será más que un sitio de Preguntas y Respuestas, generalmente les indico esta respuesta. Esto solo se puede crear dentro de una mente genio, quiero decir, esto es arte.
Mohd Abdul Mujib
55
El mayor entero negativo de 32 bits, o 64 bits, es -1.
Fred Mitchell
75

De todos modos, tome esta expresión regular (determina si la cadena contiene un entero no negativo en forma decimal que tampoco es mayor que Int32.MaxValue)

[0-9]{1,9}|[0-1][0-9]{1,8}|20[0-9]{1,8}|21[0-3][0-9]{1,7}|214[0-6][0-9]{1,7}|2147[0-3][0-9]{1,6}|21474[0-7][0-9]{1,5}|214748[0-2][0-9]{1,4}|2147483[0-5][0-9]{1,3}|21474836[0-3][0-9]{1,2}|214748364[0-7]

Tal vez te ayudaría a recordar.

Chizh
fuente
12
Eso me suena mucho más fácil y divertido. En realidad es mucho más fácil que 2147483647. Esto sería de gran ayuda para la OP
Sнаđошƒаӽ
61

Así recordaba 2147483647:

  • 214 - porque 2.14 es aproximadamente pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Escribe estos horizontalmente:

214_48_64_
and insert:
   ^  ^  ^
   7  3  7 - which is Boeing's airliner jet (thanks, sgorozco)

Ahora tienes 2147483647.

Espero que esto ayude al menos un poco.

Mikołaj Rozwadowski
fuente
3
¡Buena esa! Creo que la regla 214 debería ser pi - 1. También la máscara muestra 68 en lugar de 64. =) Para los aficionados a la aviación como yo, el valor 737 debería ser fácil de recordar al asociarlo con el avión de línea mediana de Boeing.
Puedes ir más allá que eso. Suelta el decimal y compara pi y 2 ^ 31-1. En las mismas posiciones obtienes 141 vs 147, por lo que el último dígito se convierte en 7. Luego 592 vs 483, todos están separados por un dígito. Y 643 vs 647, es que convertirse en una cosa 7 nuevamente.
Peter Cooper
@PeterCooper Altho los decimales para pi comienzan con 1415926_5_35 (Tenga en cuenta el 5, no un 4)
Moberg
15
Mi mnemotécnico es tomar 4294967296 (que es fácil de recordar) y dividir por 2
MM
56
2^(x+y) = 2^x * 2^y

2^10 ~ 1,000
2^20 ~ 1,000,000
2^30 ~ 1,000,000,000
2^40 ~ 1,000,000,000,000
(etc.)

2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512

Entonces, 2 ^ 31 (con int int max) es 2 ^ 30 (aproximadamente 1 billón) por 2 ^ 1 (2), o aproximadamente 2 billones. Y 2 ^ 32 es 2 ^ 30 * 2 ^ 2 o aproximadamente 4 mil millones. Este método de aproximación es lo suficientemente preciso incluso alrededor de 2 ^ 64 (donde el error crece hasta aproximadamente el 15%).

Si necesita una respuesta exacta, debe extraer una calculadora.

Prácticas aproximaciones de capacidad alineadas con palabras:

  • 2 ^ 16 ~ = 64 mil // uint16
  • 2 ^ 32 ~ = 4 mil millones // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillones (también conocidos como 16 billones de billones o 16 millones de billones) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillion quintillion (también conocido como 256 billones de billones de billones) // IPv6, GUID
Cuña
fuente
76
Eso dijeron los fabricantes de discos duros.
Scott Stafford
46

Simplemente tome cualquier calculadora decente y escriba "7FFFFFFF" en modo hexadecimal, luego cambie a decimal.

2147483647.

Darron
fuente
150
Cualquier calculadora decente puede hacer 2 ^ 31 también.
Christoffer
17
No sé 2 ^ 31 parece ser el largo camino para hacerlo: /
Estados
2
O simplemente recuérdelo en hexadecimal
Vernon
44
Solo ... escríbelo en hexadecimal. O Int32.MaxValue/numeric_limits<int32_t>::max()
sehe
8
@Christoffer En realidad es 2 ^ 31 - 1 :)
kupsef
36

Se trata 2.1 * 10^9. No es necesario saber exactamente 2^{31} - 1 = 2,147,483,647.

C

Puedes encontrarlo en C así:

#include <stdio.h>
#include <limits.h>

main() {
    printf("max int:\t\t%i\n", INT_MAX);
    printf("max unsigned int:\t%u\n", UINT_MAX);
}

da (bueno, sin el ,)

max int:          2,147,483,647
max unsigned int: 4,294,967,295

C ++ 11

std::cout << std::numeric_limits<int>::max() << "\n";
std::cout << std::numeric_limits<unsigned int>::max() << "\n";

Java

También puede obtener esto con Java:

System.out.println(Integer.MAX_VALUE);

Pero tenga en cuenta que los enteros Java siempre están firmados.

Python 2

Python tiene enteros de precisión arbitrarios. Pero en Python 2, se asignan a enteros en C. Entonces puedes hacer esto:

import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L

Entonces Python cambia a longcuando el número entero se hace más grande que2^31 -1

Martin Thoma
fuente
La respuesta de Python está desactualizada, consulte: stackoverflow.com/questions/13795758/…
NOhs
@NOhs Aprecio el enlace, pero mi respuesta de Python es sobre "Python 2" (agrego el 2 al título de la sección para que quede más claro). Entonces mi respuesta no está desactualizada. (Pero Python 2, ciertamente, lo es)
Martin Thoma
35

Aquí hay un mnemotécnico para recordar 2 ** 31, resta uno para obtener el valor entero máximo.

a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7, h = 8, i = 9

Boys And Dogs Go Duck Hunting, Come Friday Ducks Hide
2    1   4    7  4    8        3    6      4     8

He usado los poderes de dos hasta 18 con la suficiente frecuencia como para recordarlos, pero ni siquiera me he molestado en memorizar 2 ** 31. Es demasiado fácil calcular según sea necesario o usar una constante, o estimar como 2G.

Mark Ransom
fuente
3
¿Qué haces para 2 ^ 10, 2 ^ 11, 2 ^ 12 o 2 ^ 17 (todos los cuales tienen ceros)?
supercat
2
@supercat Rebasaría a = 0 o usaría o = 0.
Mark Ransom
Esto es asombroso Gracias, me salvaste la vida.
chenz
31

32 bits, uno para el signo, 31 bits de información:

2^31 - 1 = 2147483647

¿Por qué -1?
Como el primero es cero, el mayor es el recuento menos uno .

EDITAR para cantfindaname88

El recuento es 2 ^ 31 pero el mayor no puede ser 2147483648 (2 ^ 31) porque contamos desde 0, no desde 1.

Rank   1 2 3 4 5 6 ... 2147483648
Number 0 1 2 3 4 5 ... 2147483647

Otra explicación con solo 3 bits: 1 para el signo, 2 para la información

2^2 - 1 = 3

Debajo de todos los valores posibles con 3 bits: (2 ^ 3 = 8 valores)

1: 100 ==> -4
2: 101 ==> -3
3: 110 ==> -2
4: 111 ==> -1
5: 000 ==>  0
6: 001 ==>  1
7: 010 ==>  2
8: 011 ==>  3
Aeroespacial
fuente
@ cantfindaname88: 2 ^ 31 = combinaciones totales, por lo que varía de 0 a (2 ^ 31 -1). Sí, el primero es 0.
Luciano
30

Bueno, tiene 32 bits y, por lo tanto, puede almacenar 2 ^ 32 valores diferentes. La mitad de esos son negativos.

La solución es 2,147,483,647

Y el más bajo es −2,147,483,648.

(Observe que hay un valor negativo más).

Sarien
fuente
Tiene 32 bits y, por lo tanto, puede almacenar 2 ^ 32 valores. No menos.
JB.
28

Bueno, aparte de los chistes, si realmente estás buscando una regla de memoria útil, siempre hay una que uso para recordar números grandes.

Debe dividir su número en partes de 3 a 4 dígitos y recordarlas visualmente usando la proyección en el teclado de su teléfono celular. Es más fácil mostrar en una imagen:

ingrese la descripción de la imagen aquí

Como puede ver, a partir de ahora solo tiene que recordar 3 formas, 2 de ellas parecen un Tetris L y una parece una marca . Lo que definitivamente es mucho más fácil que memorizar un número de 10 dígitos.

Cuando necesite recuperar el número, solo recuerde las formas, imagine / mire en el teclado de un teléfono y proyecte las formas en él. Quizás inicialmente tenga que mirar el teclado, pero después de un poco de práctica, recordará que los números van de arriba a la izquierda a abajo a la derecha, por lo que simplemente podrá imaginarlo en su cabeza.

Solo asegúrese de recordar la dirección de las formas y el número de dígitos en cada forma (por ejemplo, en el ejemplo 2147483647 tenemos un Tetris L de 4 dígitos y un L de 3 dígitos).

Puede usar esta técnica para recordar fácilmente cualquier número importante (por ejemplo, recordé mi número de tarjeta de crédito de 16 dígitos, etc.).

Ivan Yurchenko
fuente
¡Buena idea! La forma 1 le da 2147, la forma 2 le da 483, y se supone que la forma 3 le da 647, pero como se dibuja, podría interpretarse como 6 5 47. ¿Cómo sé cuándo incluir todos los números cruzados (como en la forma 1 ) frente a cuándo omitir algunos (como en la Forma 3)? También debe memorizar que las formas codifican 4, 3 y 3 dígitos, respectivamente. O puede dibujar la Forma 3 con un arco de 6 a 4 en lugar de una línea recta.
jskroch
@Squinch Bueno, particularmente para recordar int.Max no debería ser un problema, ya que es posible que sepas que son alrededor de 2 mil millones, por lo que tiene 10 números (y eso significa que si la primera forma tiene 4 números, la segunda y la tercera las formas tienen 3 en consecuencia). Sin embargo, ese es un buen punto si desea utilizar este enfoque para cualquier número. Además, hay números que son difíciles de recordar de esta manera (es decir, 1112 o algo así). Por otro lado, no debería ser difícil recordar ese número de todos modos. Entonces diría que depende de usted, avíseme si se le ocurre algo interesante para esto. :)
Ivan Yurchenko
Sí, estaba pensando en usar este método para recuperar una secuencia arbitraria de dígitos, pero para este valor int.Max particular, su método funciona bastante bien. Como dijiste, los dígitos repetidos son un problema. De hecho, cualquier secuencia repetida (como 2323) es un problema. Cualquier secuencia que se cruce (como 2058) es difícil de dibujar. Cualquier técnica de memorización requiere que recuerdes varios datos. Es preferencia personal qué tipos de información se te quedan mejor en la cabeza.
jskroch
1
Así es como recuerdo los códigos PIN y similares, pero de repente necesitas escribirlo en tu computadora y darte cuenta de que el teclado numérico está invertido verticalmente. Eso es un poco un desafío.
nibarius
Alguien en Dallas, Texas , ha recibido muchas llamadas telefónicas extrañas y no tiene idea de que usted @IvanYurchenko tiene la culpa.
Bob Stein
21

La forma más fácil de hacer esto para los enteros es usar hexadecimal, siempre que no haya algo como Int.maxInt (). La razón es esta:

Max valores sin signo

8-bit 0xFF
16-bit 0xFFFF
32-bit 0xFFFFFFFF
64-bit 0xFFFFFFFFFFFFFFFF
128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Valores firmados, utilizando 7F como el valor máximo firmado

8-bit 0x7F
16-bit 0x7FFF
32-bit 0x7FFFFFFF
64-bit 0x7FFFFFFFFFFFFFFF

Valores firmados, utilizando 80 como el valor máximo firmado

8-bit 0x80
16-bit 0x8000
32-bit 0x80000000
64-bit 0x8000000000000000

¿Como funciona esto? Esto es muy similar a la táctica binaria, y cada dígito hexadecimal tiene exactamente 4 bits. Además, muchos compiladores admiten hexadecimal mucho mejor de lo que admiten binarios.

F hex to binary: 1111
8 hex to binary: 1000
7 hex to binary: 0111
0 hex to binary: 0000

Entonces 7F es igual a 01111111 / 7FFF es igual a 0111111111111111. Además, si está usando esto para "constante increíblemente alta", 7F ... es un hexadecimal seguro, pero es bastante fácil probar 7F y 80 e imprimirlos. a tu pantalla para ver cuál es.

0x7FFF + 0x0001 = 0x8000, por lo que su pérdida es solo un número, por lo que usar 0x7F ... generalmente no es una mala compensación para un código más confiable, especialmente una vez que comience a usar 32 bits o más

Joe Plante
fuente
21

Primero escriba 47 dos veces, (le gusta el Agente 47 , ¿verdad?), Manteniendo los espacios como se muestra (cada guión es un espacio para un solo dígito. Primero 2 espacios, luego 4)

--47----47

Piensa que tienes 12en la mano (porque 12 = una docena). Multiplique por el 4primer dígito del número del Agente 47, es decir 47, y coloque el resultado a la derecha del primer par que ya tiene

12 * 4 = 48
--4748--47 <-- after placing 48 to the right of first 47

Luego multiplique 12por 3(para hacer el segundo dígito del número del Agente 47, que es 7, usted necesita 7 - 4 = 3) y coloque el resultado a la derecha de los primeros 2 pares, el último par de ranuras

12 * 3 = 36
--47483647 <-- after placing 36 to the right of first two pairs

Finalmente arrastre los dígitos uno por uno desde su mano comenzando desde el dígito más a la derecha (2 en este caso) y colóquelos en el primer espacio vacío que obtenga

2-47483647 <-- after placing 2
2147483647 <-- after placing 1

¡Ahí tienes! Para el límite negativo, puede pensar en eso como 1 más en valor absoluto que el límite positivo.

Practica algunas veces, ¡y te acostumbrarás!

Sнаđошƒаӽ
fuente
"1 más en valor absoluto que el límite positivo" me consiguió.
Navin
20

2GB

(¿Hay una longitud mínima para las respuestas?)

Runa
fuente
18
¿No debería ser GiB?
Jouke van der Maas
99
@JoukevanderMaas: en realidad, debería ser 4B.
Ted Hopp
1
Es por eso que el límite de RAM que puede tener en una computadora de 32 bits es de 4 GB
Serj Sagan
3
El valor de 4 GB es correcto con enteros sin signo. si tiene un int firmado, obviamente necesita dividir por 2 para obtener el valor máximo posible
SwissCoder
3
En 32 bits hay 2 GB de reserva de espacio de memoria para el proceso del usuario y 2 GB para el núcleo. Se puede configurar para que el kernel tenga solo 1 GB reservado
Rune
15

Suponiendo .NET -

Console.WriteLine(Int32.MaxValue);
Kev
fuente
15

Si sabe de memoria su tabla ASCII y no MaxInt:
!GH6G = 21 47 48 36 47

Mark Hurd
fuente
Cuando escribí esta respuesta, no sabía que GH6G tenía tantos éxitos de Google, y ahora lo he usado yo mismo :-)
Mark Hurd
15

La mejor regla para memorizarlo es:
21 (¡número mágico!)
47 (¡solo recuérdalo !
48 (secuencial!)
36 (21 + 15, ¡ambas magias!)
47 nuevamente

También es más fácil recordar 5 pares que 10 dígitos.

Leandro
fuente
14

La forma más fácil de recordar es mirar std::numeric_limits< int >::max()

Por ejemplo ( de MSDN ),

// numeric_limits_max.cpp

#include <iostream>
#include <limits>

using namespace std;

int main() {
   cout << "The maximum value for type float is:  "
        << numeric_limits<float>::max( )
        << endl;
   cout << "The maximum value for type double is:  "
        << numeric_limits<double>::max( )
        << endl;
   cout << "The maximum value for type int is:  "
        << numeric_limits<int>::max( )
        << endl;
   cout << "The maximum value for type short int is:  "
        << numeric_limits<short int>::max( )
        << endl;
}
Seq
fuente
14

Curiosamente, Int32.MaxValue tiene más caracteres que 2,147,486,647.

Pero, de nuevo, tenemos la finalización del código,

Así que supongo que todo lo que realmente tenemos que memorizar es Int3<period>M<enter>, que son solo 6 caracteres para escribir en Visual Studio.

ACTUALIZACIÓN Por alguna razón fui rechazado. La única razón por la que puedo pensar es que no entendieron mi primera declaración.

"Int32.MaxValue" toma como máximo 14 caracteres para escribir. 2.147.486.647 toma 10 o 13 caracteres para escribir dependiendo de si pone las comas o no.

Yo no
fuente
2
Pero lo que cuenta no es cuántos caracteres tiene que escribir, sino cómo memorizarlos. Estoy seguro de que Iwannagohomees más fácil de memorizar que 298347829. Sin embargo, no hay razón para un -1.
glglgl
3
Podría ser menor que eso, simplemente haga su propio fragmento de valor máximo, "imv" <tab> <tab> ¿tal vez?
BradleyDotNET
44
Personajes !=pulsaciones de teclas. Para este pobre usuario de .Net, es in+. + ma+ Retorno.
Michael - ¿Dónde está Clay Shirky?
11

Solo recuerde que 2 ^ (10 * x) es aproximadamente 10 ^ (3 * x): probablemente ya esté acostumbrado a esto con kilobytes / kibibytes, etc. Eso es:

2^10 = 1024                ~= one thousand
2^20 = 1024^2 = 1048576    ~= one million
2^30 = 1024^3 = 1073741824 ~= one billion

Como un int usa 31 bits (+ ~ 1 bit para el signo), solo duplica 2 ^ 30 para obtener aproximadamente 2 mil millones. Para un int sin firmar con 32 bits, doble nuevamente por 4 mil millones. El factor de error aumenta cuanto más grande va, por supuesto, pero no necesita memorizar el valor exacto (si lo necesita, debería estar utilizando una constante predefinida para ello de todos modos). El valor aproximado es lo suficientemente bueno como para notar cuándo algo podría estar peligrosamente cerca de desbordarse.

Brian
fuente
10
Offtopic: 2 ^ 4 = 4 ^ 2, por lo tanto, ¡la exponenciación es conmutativa!
Adam Liss el
10
@ Pier-OlivierThibault no, lo uso todo el tiempo! ahora necesito averiguar por qué todas mis matemáticas están saliendo mal. probablemente algo que ver con errores de multiplicación. de todos modos, adiós!
tckmn
9

así es como lo hago para recordar 2,147,483,647

A un cuarto de la sabana lejana, Optimus Trio hechizó cuarenta septenarios

2 - To
1 - A
4 - Far
7 - Savannah
4 - Quarter
8 - Optimus
3 - Trio
6 - Hexed
4 - Forty
7 - Septenary
Samuel
fuente
7

¿Qué quieres decir? Debería ser bastante fácil recordar que es 2 ^ 32. Si desea que una regla memorice el valor de ese número, una práctica regla práctica es convertir entre binario y decimal en general:

2 ^ 10 ~ 1000

lo que significa 2 ^ 20 ~ 1,000,000

y 2 ^ 30 ~ 1,000,000,000

Duplicar eso (2 ^ 31) es aproximadamente 2 mil millones, y duplicar eso nuevamente (2 ^ 32) es 4 mil millones.

Es una manera fácil de obtener una estimación aproximada de cualquier número binario. 10 ceros en binario se convierten en 3 ceros en decimal.

jalf
fuente
77
pero no es 2 ^ 32 - es (2 ^ 31) -1
Steve Folly
6

En Objective-C (iOS y OSX), solo recuerde estas macros:

#define INT8_MAX         127
#define INT16_MAX        32767
#define INT32_MAX        2147483647
#define INT64_MAX        9223372036854775807LL

#define UINT8_MAX         255
#define UINT16_MAX        65535
#define UINT32_MAX        4294967295U
#define UINT64_MAX        18446744073709551615ULL
juniperi
fuente
5

Int32 significa que tiene 32 bits disponibles para almacenar su número. El bit más alto es el bit de signo, esto indica si el número es positivo o negativo. Entonces tienes 2 ^ 31 bits para números positivos y negativos.

Con cero siendo un número positivo, obtienes el rango lógico de (mencionado anteriormente)

+2147483647 a -2147483648

Si crees que es demasiado pequeño, usa Int64:

+9223372036854775807 a -9223372036854775808

¿Y por qué demonios quieres recordar este número? Para usar en su código? Siempre debe usar Int32.MaxValue o Int32.MinValue en su código ya que estos son valores estáticos (dentro del núcleo .net) y, por lo tanto, su uso es más rápido que la creación de un nuevo int con código.

Mi afirmación: si conoces este número de memoria ... ¡solo estás presumiendo!


fuente
2
La mayoría de las computadoras modernas almacenan números en formato de "dos cumplidos". El bit más alto (no más bajo) es el signo. Lo bueno de la competencia de dos es que cinco números son manejados por las reglas naturales de desbordamiento de la CPU. es decir, 0xFF es 8 bit -1, agregue eso a 0x01 (+1) y obtendrá 0x100. Trunca bits por encima de 8 a 0x00 y tienes tu respuesta.
Tom Leys
5

Recuerda esto: 21 IQ ITEM 47

Se puede descodificar con cualquier teclado telefónico, o simplemente puede escribir uno usted mismo en un papel.

Para recordar "21 IQ ITEM 47", iría con "Hitman: Codename 47 tenía 21 misiones, que eran cada IQ ITEM por sí mismas".

O "me lavo los dientes a las 21:47 todos los días, porque tengo un coeficiente intelectual alto y no me gustan los artículos en la boca".

soprof
fuente
¿Con qué te refieres de-encoded with any phone pad?
mcExchange