Qual é o valor máximo para um int32?


1380

Eu nunca consigo me lembrar do número. Eu preciso de uma regra de memória.


48
não assinado: 2³²-1 = 4 · 1024³-1; assinado: -2³¹ .. + 2³¹-1, porque o bit de sinal é o bit mais alto. Apenas aprenda 2⁰ = 1 a 2¹⁰ = 1024 e combine. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad 28/03

31
Eu geralmente lembro que a cada 3 bits é um dígito decimal. Isso me leva à ordem correta de magnitude: 32 bits são 10 dígitos.
Barmar

8
@JoachimSauer certamente pode ajudar na depuração se você aprender a reconhecer pelo menos esses tipos de números.
Dunaril

72
"se um disco ficar cheio, a exclusão de todos os mbytes será arquivada" (2 letras, 1 letra, 4 letras, 7 letras, 4 letras, 8 letras, 3 letras, 6 letras, 4 letras, 7 letras)
UltraCommit

8
Um caso, quando o int32 não é suficiente: bbc.com/news/world-asia-30288542
ingaham

Respostas:


5073

São 2.147.483.647. A maneira mais fácil de memorizar é através de uma tatuagem.


83
Meu mnemônico: 2 ^ 10 está muito próximo de 1000, então 2 ^ (3 * 10) é 1000 ^ 3 ou cerca de 1 bilhão. Um dos 32 bits é usado para sinal, então o valor máximo é realmente apenas 2 ^ 31, que é aproximadamente o dobro do valor obtido por 2 ^ (3 * 10): 2 bilhões.
16807

164
2147483647 sem vírgulas.
Vern D.

20
Simplesmente use: Integer.MAX_VALUEem Java.
Tim Tim

184
Se você fizer a tatuagem em seu rosto, não se esqueça de inverter a tatuagem para que fique correta no espelho. Caso contrário, você verá 746.384.741,2, o que está errado e seria embaraçoso.
Larry S

127
2.147.483.647 = 0x7FFFFFFF, se você quiser se lembrar, basta usar hex.
roottraveller

493

A resposta mais correta que consigo pensar é Int32.MaxValue.


18
Antes disso, eu costumava #define INT32_MIN e INT32_MAX em todos os meus projetos.
WildJoe 12/09

45
@CamiloMartin Hey. Eu me ressinto disso. Simplesmente não havia lugar para mais tatuagens. Obviamente, o conjunto de caracteres iso-8859-1 e decimais de Pi com 31415 tiveram que ter prioridade
veja

3
Quando você está programando: sim em 99% dos casos. Mas você pode querer saber que é algo como ~ 2 bilhões no planejamento de abordagens de programação ou ao trabalhar com dados, embora seja um número muito grande. :)
Andre Figueiredo

@sehe O latin1 / Windows 1252 não está obsoleto até agora? Se não puder caber nos 7 bytes do ASCII, acho que não merece um lugar na memória principal. Quero dizer ... todas as páginas de código do UNICODE são meio úteis, mas mais de um meg de espaço na pele parece um desperdício. (Sem mencionar que ainda não inclui glifos descritivos para "pageup / pagedown" ou "pagehome / pageend")

1
Essa propriedade pode ser um bom conselho além de mencionar o número correto. No entanto, eu não gosto de esta resposta, uma vez que apenas menciona uma maneira portável de dertermining o valor e não mencionar para os quais linguagens de programação este é obras, ou ...
mozzbozz

439

Se você acha que o valor é muito difícil de lembrar na base 10, tente a base 2: 1111111111111111111111111111111


145
@Nick Whaley: Não, 1111111111111111111111111111111 é positivo. 11111111111111111111111111111111 seria negativo :-)
Coalhada

58
Base 16 é ainda mais fácil 7FFFFFFF
Nelson Galdeman Graziano

34
@Curd 11111111111111111111111111111111como um número da base 2 ainda seria positivo (um exemplo negativo na base 2 seria -1) . Essa seqüência de bits só é negativo se representando número de complemento a 32-bit 2 de :)
BlueRaja - Danny Pflughoeft

143
Mais fácil de lembrar será a base 2.147.483.647. Então tudo que você tem que lembrar é 1.
big_tommy_7bb

82
@ tim_barber_7BB na verdade, é 10.
fscheidl

317

se você se lembra do número inteiro do Pi, o número que você está procurando está na posição 1.867.996.680 a 1.867.996.689 dos dígitos decimais de Pi

A sequência numérica 2147483647 aparece no dígito decimal 1.867.996.680 de Pi. 3,14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

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


30
você sabe, quando comecei a ler sua resposta, esperava algo prático, como o 20º dígito.
JqueryToAddNumbers

95
Isso parece bem legal. Você tem outra regra de memória para se lembrar de 1.867.996.680? Acho que é difícil lembrar em qual índice para começar a procurar ....
Alderath

10
" se você consegue se lembrar de todo o número Pi ... " - não, você não consegue, é irracional {como são possivelmente uma ou duas postagens nesta
seção de

10
@Alderath I tipicamente lembrar que como os decimais em 10 sqrt (2) começando no número dígito 380630713 ....
Henrik

2
@Alderath: a string numérica 1867996680 aparece no dígito decimal 380.630.713 da raiz quadrada de 2.
Yair Halberstadt

290

São 10 dígitos, então finja que é um número de telefone (supondo que você esteja nos EUA). 214-748-3647. Eu não recomendo chamá-lo.


13
Falando de lembrar-lo como um número de telefone, parece que pode haver alguns spammers telefônicas usando-o: mrnumber.com/1-214-748-3647
Steven

8
"Não há troca" 748 "em Dallas. Esse número é falso." - a partir da página vinculada por shambleh
Kálmán

104
@ Steven Eu não acho que eles são spammers, apenas pessoas que acidentalmente armazenaram o número de telefone como um em INTvez de VARCHARno MySQL.
Zarel

8
Tentei chamá-lo. Ele tocou algumas vezes e foi para o tom de discagem com erro. = (
Crítico 21/02

172

Em vez de pensar nele como um grande número, tente dividi-lo e procurar idéias associadas, por exemplo:

  • 2 intervalos máximos de sinuca (um intervalo máximo é 147)
  • 4 anos (48 meses)
  • 3 anos (36 meses)
  • 4 anos (48 meses)

O exposto acima se aplica ao maior número negativo; positivo é aquele menos um.

Talvez o colapso acima não seja mais memorável para você (dificilmente é emocionante!), Mas espero que você possa ter algumas idéias!


99
Esse é um dos dispositivos mneumônicos mais complicados que eu já vi. Impressionante.
Ben Hoffstein

9
Heh, gente como Derren Brown realmente defende esse tipo de abordagem - dividir um número em algo aleatório, mas que é mais memorável do que apenas uma carga de números: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/…
Luke Bennett

19
Eu tenho um mnemônico melhor: tudo o que você precisa lembrar são 2 e 31, pois aparentemente é exatamente 2 ^ 31! Oh, espere ...
Tamas Czinege

28
@DrJokepu Não tenho certeza sobre a precedência do operador ... Isso significa 2^(31!)ou (2^31)!?
Alderath

1
@Lucio Note que a minha resposta diz respeito, em primeira instância para o maior número negativo que termina em 48, não 47
Luke Bennett

144

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

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

Mnemônico: "bêbado AKA com tesão"

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

27
Os mundos mais difíceis de lembrar Mnemonic. Se você pode memorizar 0118 999 88199 9119 752 ... 3, pode memorizar isso.
BenM

11
@Rondles Acho que na verdade é 7253 no final.
Tim Tisdall

21
Não. A idade para beber é de 18 anos aqui ... Parece que não posso usar esse mnemônico, minha vida está arruinada.
precisa

4
@Aaren Cordova Eles costumavam dizer que o stackoverflow nunca seria engraçado, nada mais seria do que um site de perguntas e respostas, geralmente eu os indico para esta resposta. Essa coisa só pode ser criada dentro de uma mente genial, quero dizer, isso é arte.
Mohd Abdul Mujib

5
O maior número inteiro negativo de 32 bits, ou 64 bits, é -1.
Fred Mitchell

75

De qualquer forma, considere esse regex (ele determina se a sequência contém um número inteiro não negativo na forma decimal que também não é maior 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]

Talvez ajude você a se lembrar.


12
Isso parece muito mais fácil e divertido para mim. Na verdade, é realmente muito mais fácil do que 2147483647. Isso seria de grande ajuda para o OP #
24/0315

61

Foi assim que me lembrei 2147483647:

  • 214 - porque 2,14 é aproximadamente pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Escreva-os horizontalmente:

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

Agora você tem 2147483647.

Espero que isso ajude pelo menos um pouco.


3
Agradável! Eu acho que a regra 214 deve ser pi - 1. Além disso, a máscara mostra 68 em vez de 64. =) Para os fãs de aviação como eu, é fácil lembrar o valor do 737 associando-o ao jato de médio porte da Boeing.

Você pode ir além disso. Largue o decimal e compare pi e 2 ^ 31-1. Nas mesmas posições, você obtém 141 x 147, então o último dígito se torna um 7. Em seguida, 592 vs 483, todos estão um dígito um do outro. E 643 vs 647, é que isso se torna uma coisa 7 novamente.
Peter Cooper

@PeterCooper Altho os decimais para começa pi com 1415926_5_35 (Observe a 5, não um 4)
Moberg

15
Meu mnemônico é pegar 4294967296 (que é fácil de lembrar) e 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

Portanto, 2 ^ 31 (assinado int max) é 2 ^ 30 (cerca de 1 bilhão) vezes 2 ^ 1 (2), ou cerca de 2 bilhões. E 2 ^ 32 é 2 ^ 30 * 2 ^ 2 ou cerca de 4 bilhões. Esse método de aproximação é preciso o suficiente, mesmo em torno de 2 ^ 64 (onde o erro cresce para cerca de 15%).

Se você precisar de uma resposta exata, deverá abrir uma calculadora.

Aproximações úteis de capacidade alinhada por palavras:

  • 2 ^ 16 ~ = 64 mil // uint16
  • 2 ^ 32 ~ = 4 bilhões // uint32, IPv4, tempo unix
  • 2 ^ 64 ~ = 16 quintilhões (aka 16 bilhões de bilhões ou 16 milhões de trilhões) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintilhões de quintilhões (aka 256 trilhões de trilhões de trilhões) // IPv6, GUID

76
Foi o que disseram os fabricantes de discos rígidos.
Scott Stafford

46

Basta pegar uma calculadora decente e digitar "7FFFFFFF" no modo hexadecimal e depois mudar para decimal.

2147483647.


150
Qualquer calculadora decente pode fazer 2 ^ 31 também.
1811 Christoffer

17
Eu não sei 2 ^ 31 parece ser o longo caminho para fazê-lo: /
Estados

2
Ou apenas lembre-se dele em hexa
Vernon

4
Apenas ... escreva em hexadecimal. Ou Int32.MaxValue/numeric_limits<int32_t>::max()
veja

8
@Christoffer É realmente 2 ^ 31 - 1 :)
kupsef

36

É sobre 2.1 * 10^9. Não há necessidade de saber exatamente 2^{31} - 1 = 2,147,483,647.

C

Você pode encontrá-lo em C assim:

#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);
}

dá (bem, sem o ,)

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

Você também pode obter isso com Java:

System.out.println(Integer.MAX_VALUE);

Mas lembre-se de que números inteiros Java sempre são assinados.

Python 2

Python possui números inteiros de precisão arbitrários. Mas no Python 2, eles são mapeados para inteiros C. Então você pode fazer isso:

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

Então, Python muda para longquando o número inteiro fica maior que2^31 -1


A resposta do Python está desatualizada, veja: stackoverflow.com/questions/13795758/…
NOhs

@ NOhs Aprecio o link, mas minha resposta do Python é sobre "Python 2" (adiciono o 2 ao título da seção para torná-lo mais claro). Portanto, minha resposta não está desatualizada. (Mas Python 2, reconhecidamente, é)
Martin Thoma

35

Aqui está um mnemônico para lembrar 2 ** 31, subtraia um para obter o valor inteiro 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

Eu usei os poderes de dois até 18 com frequência suficiente para lembrá-los, mas mesmo assim eu não me incomodei em memorizar 2 ** 31. É muito fácil calcular conforme necessário ou usar uma constante ou estimar como 2G.


3
O que você faz para 2 ^ 10, 2 ^ 11, 2 ^ 12 ou 2 ^ 17 (todos com zeros)?
Supercat

2
@ supercat Eu rebaseia a = 0 ou usaria o = 0.
Mark Ransom #

Isso é incrível. Obrigado, você salva minha vida.
chenz

31

32 bits, um para o sinal, 31 bits de informação:

2^31 - 1 = 2147483647

Por que -1?
Como o primeiro é zero, o maior é a contagem menos um .

EDIT para cantfindaname88

A contagem é 2 ^ 31, mas a maior não pode ser 2147483648 (2 ^ 31) porque contamos de 0, não 1.

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

Outra explicação com apenas 3 bits: 1 para o sinal, 2 para a informação

2^2 - 1 = 3

Abaixo de todos os valores possíveis com 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

@ cantfindaname88: 2 ^ 31 = total de combinações, portanto varia de 0 a (2 ^ 31 -1). Sim, o primeiro é 0.
Luciano

30

Bem, ele tem 32 bits e, portanto, pode armazenar 2 ^ 32 valores diferentes. Metade deles é negativa.

A solução é 2.147.483.647

E o mais baixo é -2.147.483.648.

(Observe que há mais um valor negativo.)


Possui 32 bits e, portanto, pode armazenar 2 ^ 32 valores. Não menos.
JB.

28

Bem, além das piadas, se você está realmente procurando uma regra de memória útil, há uma que eu sempre uso para lembrar grandes números.

Você precisa dividir seu número em partes de 3 a 4 dígitos e lembrá-los visualmente usando a projeção no teclado do telefone celular. É mais fácil mostrar na foto:

insira a descrição da imagem aqui

Como você pode ver, a partir de agora você só precisa se lembrar de três formas, duas delas parecem um Tetris L e uma parece um tiquetaque . Definitivamente, é muito mais fácil do que memorizar um número de 10 dígitos.

Quando você precisar recuperar o número, basta recuperar as formas, imagine / olhe no teclado do telefone e projete as formas nele. Talvez inicialmente você precise olhar para o teclado, mas depois de um pouco de prática, lembre-se de que os números estão indo do canto superior esquerdo para o canto inferior direito, para que você possa simplesmente imaginá-lo na sua cabeça.

Lembre-se de lembrar a direção das formas e o número de dígitos em cada forma (por exemplo, no exemplo 2147483647, temos um Tetris L de 4 dígitos e um L de 3 dígitos).

Você pode usar essa técnica para lembrar facilmente qualquer número importante (por exemplo, lembrei-me do número do meu cartão de crédito de 16 dígitos etc.).


Boa ideia! A Forma 1 fornece 2147, a Forma 2 fornece 483 e a Forma 3 deve fornecer 647, mas, como desenhada, pode ser interpretada como 6 5 47. Como sei quando incluir todos os números cruzados (como na Forma 1 ) vs. quando pular alguns (como na Forma 3)? Você também deve memorizar que as formas codificam 4, 3 e 3 dígitos, respectivamente. Ou você pode desenhar a Forma 3 com um arco de 6 a 4 em vez de uma linha reta.
jskroch

@Squinch Bem, particularmente para lembrar o int.Max, não deve ser um problema, pois você deve saber que são cerca de 2 bilhões, portanto, possui 10 números (e isso significa que se a primeira forma tiver 4 números, a segunda e a terceira). formas têm 3 em conformidade). No entanto, esse é um ponto interessante se você quiser usar essa abordagem para qualquer número. Além disso, há números que são difíceis de lembrar de serem usados ​​dessa maneira (por exemplo, 1112 ou algo assim). Por outro lado, não deve ser difícil lembrar de tal número. Então, eu diria que depende de você, deixe-me saber se você tiver algo interessante para isso. :)
Ivan Yurchenko

Sim, eu estava pensando em usar esse método para recuperar uma sequência arbitrária de dígitos, mas para esse valor int.Max específico, seu método funciona razoavelmente bem. Como você disse, dígitos repetidos são um problema. De fato, qualquer sequência repetida (como 2323) é um problema. Qualquer sequência que se cruze (como 2058) é difícil de desenhar. Qualquer técnica de memorização exige que você se lembre de várias informações. É uma preferência pessoal quais tipos de informações melhor ficam na sua cabeça.
Jkroch # 19/17

1
É assim que me lembro de códigos PIN e similares, mas de repente você precisa digitá-lo no seu computador e perceber que o teclado numérico é invertido verticalmente. Então isso é um pouco de desafio.
Nibarius

Alguém em Dallas, Texas , recebeu muitos telefonemas estranhos e não tem idéia de que você é o culpado de @IvanYurchenko.
Bob Stein

21

A maneira mais fácil de fazer isso para números inteiros é usar hexadecimal, desde que não exista algo como Int.maxInt (). A razão é esta:

Valores máximos não assinados

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

Valores assinados, usando 7F como o valor máximo assinado

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

Valores assinados, usando 80 como o valor máximo assinado

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

Como é que isso funciona? Isso é muito semelhante à tática binária e cada dígito hexadecimal é exatamente de 4 bits. Além disso, muitos compiladores suportam hexadecimal muito melhor do que binários.

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

Portanto, 7F é igual a 01111111 / 7FFF é igual a 0111111111111111. Além disso, se você estiver usando isso para "constante incrivelmente alta", 7F ... é um hex seguro, mas é fácil o suficiente experimentar 7F e 80 e imprimi-los na sua tela para ver qual é.

0x7FFF + 0x0001 = 0x8000, portanto, sua perda é apenas um número, portanto, usar 0x7F ... geralmente não é uma desvantagem ruim para um código mais confiável, especialmente quando você começa a usar 32 bits ou mais


21

Primeiro, escreva 47 duas vezes (você gosta do Agente 47 , certo?), Mantendo os espaços mostrados (cada traço é um slot para um único dígito. Primeiros 2 slots e depois 4)

--47----47

Pense que você tem 12em mãos (porque 12 = uma dúzia). Multiplique pelo 4primeiro dígito do número do Agente 47, ou seja 47, e coloque o resultado à direita do primeiro par que você já possui

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

Multiplique 12por 3(para fazer o segundo dígito do número do Agente 47, ou seja 7, você precisa 7 - 4 = 3) e coloque o resultado à direita dos 2 primeiros pares, o último slot do par

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

Por fim, arraste os dígitos um a um da sua mão, começando no dígito mais à direita (2 neste caso) e coloque-os no primeiro slot vazio que você obtiver

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

Aí está! Para o limite negativo, você pode pensar nisso como mais 1 em valor absoluto do que o limite positivo.

Pratique algumas vezes e você entenderá!


"Mais 1 em valor absoluto do que o limite positivo" me pegou.
Navin

20

2GB

(existe um tamanho mínimo para respostas?)


18
Isso não deveria ser GiB?
Jouke van der Maas 30/10/10

9
@JoukevanderMaas - Na verdade, deve ser 4B.
Ted Hopp

1
É por isso que o limite de RAM você pode ter em um computador de 32 bits é de 4 GB
Serj Sagan

3
o valor de 4 GB está correto com números inteiros não assinados. se você tem um int assinado, você obviamente precisa dividir por 2 para obter o valor máximo possível
SwissCoder

3
Em 32 bits, existem 2 GB da reserva de espaço em memória para o processo do usuário e 2 GB para o kernel. Ele pode ser configurado para que o kernel tenha apenas 1 GB reservado
Rune

15

Assumindo .NET -

Console.WriteLine(Int32.MaxValue);

15

Se você conhece sua tabela ASCII de cor e não MaxInt:
!GH6G = 21 47 48 36 47


Quando eu escrevi essa resposta eu não sabia GH6G teve tantos acessos do Google, e agora eu usei isso mesmo :-)
Mark Hurd

15

A melhor regra para memorizar é:
21 (número mágico!)
47 (lembre-se disso)
48 (sequencial!)
36 (21 + 15, ambas as mágicas!)
47 novamente

Também é mais fácil lembrar 5 pares do que 10 dígitos.


14

A maneira mais fácil de lembrar é olhar para std::numeric_limits< int >::max()

Por exemplo ( do 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;
}

14

Curiosamente, Int32.MaxValue tem mais caracteres que 2.147.486.647.

Mas, novamente, temos a conclusão de código,

Acho que tudo o que realmente precisamos memorizar é Int3<period>M<enter>que são apenas 6 caracteres para digitar no visual studio.

ATUALIZAÇÃO Por algum motivo, eu fui votada com baixa. A única razão pela qual consigo pensar é que eles não entenderam minha primeira afirmação.

"Int32.MaxValue" leva no máximo 14 caracteres para digitar. 2.147.486.647 leva 10 ou 13 caracteres para digitar, dependendo se você coloca as vírgulas ou não.


2
Mas o que conta não é quantos caracteres você precisa digitar, mas como memorizá-lo. Tenho certeza que Iwannagohomeé mais fácil memorizar do que 298347829. Não há razão para -1, no entanto.
glglgl

3
Pode ser menor que isso, basta criar seu próprio snippet de valor máximo, "imv" <tab> <tab>, talvez?
precisa saber é o seguinte

4
Caracteres !=Teclas. Para este pobre usuário de .Net, é in+ .+ ma+ Return.
Michael - Onde está Clay Shirky

11

Lembre-se de que 2 ^ (10 * x) é aproximadamente 10 ^ (3 * x) - você provavelmente já está acostumado a isso com kilobytes / kibibytes etc. Isso é:

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

Como um int usa 31 bits (+ ~ 1 bit para o sinal), apenas dobre 2 ^ 30 para obter aproximadamente 2 bilhões. Para um int não assinado usando 32 bits, dobre novamente para 4 bilhões. O fator de erro aumenta, quanto maior você aumentar, é claro, mas você não precisa do valor exato memorizado (se precisar, deve usar uma constante predefinida para ele). O valor aproximado é bom o suficiente para perceber quando algo pode estar perigosamente próximo do transbordamento.


10
Offtopic: 2 ^ 4 = 4 ^ 2, portanto a exponenciação é comutativa!
Adam Liss

10
@ Pier-OlivierThibault não, eu uso o tempo todo! agora preciso descobrir por que toda a minha matemática está saindo errada. provavelmente algo a ver com erros de multiplicação. de qualquer maneira, tchau!
Tckmn

9

é assim que eu faço para lembrar 2.147.483.647

Para um bairro da savana distante, o trio optimus enfeitiçou quarenta setenários

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

7

O que você quer dizer? Deve ser fácil lembrar que é 2 ^ 32. Se você deseja que uma regra memorize o valor desse número, uma regra prática é a conversão entre binário e decimal em geral:

2 ^ 10 ~ 1000

o que significa 2 ^ 20 ~ 1.000.000

e 2 ^ 30 ~ 1.000.000.000

O dobro disso (2 ^ 31) é aproximadamente 2 bilhões, e dobrando novamente (2 ^ 32) é 4 bilhões.

É uma maneira fácil de obter uma estimativa aproximada de qualquer número binário. 10 zeros em binário se tornam 3 zeros em decimal.


7
mas não é 2 ^ 32 - é (2 ^ 31) -1 #
Steve Folly

6

No Objective-C (iOS e OSX), lembre-se destas 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

5

Int32 significa que você tem 32 bits disponíveis para armazenar seu número. O bit mais alto é o bit de sinal, isso indica se o número é positivo ou negativo. Então você tem 2 ^ 31 bits para números positivos e negativos.

Com zero sendo um número positivo, você obtém o intervalo lógico de (mencionado anteriormente)

+2147483647 a -2147483648

Se você acha que é muito pequeno, use Int64:

+9223372036854775807 a -9223372036854775808

E por que diabos você quer se lembrar desse número? Para usar no seu código? Você sempre deve usar Int32.MaxValue ou Int32.MinValue em seu código, pois esses são valores estáticos (dentro do núcleo .net) e, portanto, mais rápidos em uso do que a criação de um novo int com código.

Minha afirmação: se conhece esse número de memória .. você está apenas se exibindo!


2
A maioria dos computadores modernos armazena números no formato "dois elogios". O bit mais alto (não o mais baixo) é o sinal. O mais interessante com dois componentes é que os números -ve são tratados pelas regras naturais de sobrecarga da CPU. ou seja, 0xFF é 8 bits -1, adicione-o a 0x01 (+1) e você obtém 0x100. Trunque bits acima de 8 a 0x00 e você terá sua resposta.
Tom Leys

5

Lembre-se disto: 21 IQ ITEM 47

Ele pode ser decodificado com qualquer teclado telefônico ou você mesmo pode escrever um em um papel.

Para lembrar "21 IQ ITEM 47", eu usaria "Hitman: Codename 47 tinha 21 missões, que eram cada IQ ITEM por si mesmas".

Ou "limpo os dentes às 21:47 todos os dias, porque tenho QI alto e não gosto de itens na boca".


Como assim de-encoded with any phone pad?
McExchange
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.