Quelle est la valeur maximale pour un int32?

1380

Je ne me souviens jamais du numéro. J'ai besoin d'une règle de mémoire.

Flinkman
la source
48
non signé: 2³²-1 = 4 · 1024³-1; signé: -2³¹ .. + 2³¹-1, car le bit de signe est le bit le plus élevé. Apprenez simplement 2⁰ = 1 à 2¹⁰ = 1024 et combinez. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad
31
Je me souviens généralement que tous les 3 bits représentent un chiffre décimal. Cela m'amène au bon ordre de grandeur: 32 bits, c'est 10 chiffres.
Barmar
8
@JoachimSauer, il peut certainement aider au débogage si vous apprenez à reconnaître au moins ces types de nombres.
Dunaril
72
"si un disque est plein, la suppression de tous les mbytes archivera" (2 lettres, 1 lettre, 4 lettres, 7 lettres, 4 lettres, 8 lettres, 3 lettres, 6 lettres, 4 lettres, 7 lettres)
UltraCommit
8
Un cas, lorsque l'int32 ne suffit pas: bbc.com/news/world-asia-30288542
ingaham

Réponses:

5073

C'est 2.147.483.647. Le moyen le plus simple de le mémoriser est via un tatouage.

Ben Hoffstein
la source
83
Mon mnémonique: 2 ^ 10 est très proche de 1000, donc 2 ^ (3 * 10) est 1000 ^ 3 ou environ 1 milliard. L'un des 32 bits est utilisé pour le signe, donc la valeur maximale n'est vraiment que de 2 ^ 31, ce qui représente environ le double du montant que vous obtenez pour 2 ^ (3 * 10): 2 milliards.
16807
164
2147483647 sans virgule.
Vern D.
20
Utilisez simplement: Integer.MAX_VALUEen Java.
Tim
184
Si vous obtenez le tatouage sur votre visage, n'oubliez pas de l'inverser pour qu'il se lise correctement dans le miroir. Sinon, vous verrez 746 384 741,2, ce qui est faux et serait embarrassant.
Larry S
127
2,147,483,647 = 0x7FFFFFFF, si vous voulez vous en souvenir, utilisez simplement hex.
roottraveller
493

La réponse la plus correcte à laquelle je peux penser est Int32.MaxValue.

Adrian Clark
la source
18
Avant que cela n'existe, je #define INT32_MIN et INT32_MAX dans tous mes projets.
WildJoe
45
@CamiloMartin Hey. Je m'en veux. Il n'y avait tout simplement plus de place pour plus de tatouages. De toute évidence, l'iso-8859-1 charset et Pi à 31415 décimaux devaient avoir la priorité
sehe
3
Lorsque vous programmez: oui dans 99% des cas. Mais vous voudrez peut-être savoir que c'est quelque chose comme ~ 2 milliards pour planifier des approches de programmation ou lorsque vous travaillez avec des données, bien que ce soit un très grand nombre. :)
Andre Figueiredo
@sehe N'est-ce pas latin1 / Windows 1252 obsolète maintenant? S'il ne peut pas tenir dans les 7 octets de l'ASCII, je ne pense pas qu'il mérite une place dans la mémoire principale. Je veux dire ... toutes les pages de codes UNICODE sont un peu utiles, mais plus d'un méga-espace de peau semble un gaspillage. (Sans compter qu'il n'inclut toujours pas les glyphes descriptifs pour "pageup / pagedown" ou "pagehome / pageend")
1
Cette propriété pourrait être un bon conseil en plus de mentionner le bon numéro. Cependant, je n'aime pas cette réponse car elle ne mentionne qu'une manière non transférable de déterminer la valeur et elle ne mentionne pas non plus pour quels langages de programmation cela fonctionne ...
mozzbozz
439

Si vous pensez que la valeur est trop difficile à retenir dans la base 10, essayez la base 2: 1111111111111111111111111111111

fromage blanc
la source
145
@Nick Whaley: Non, 1111111111111111111111111111111 est positif. 1111111111111111111111111111111111 serait négatif :-)
Curd
58
Base 16 c'est encore plus facile 7FFFFFFF
Nelson Galdeman Graziano
34
@Curd en 11111111111111111111111111111111tant que nombre en base-2 serait toujours positif (un exemple négatif en base-2 serait -1) . Cette séquence de bits n'est négative que si elle représente un nombre complémentaire de 32 bits 2 :)
BlueRaja - Danny Pflughoeft
143
Le plus facile à retenir sera la base 2 147 483 647. Ensuite, tout ce que vous devez vous rappeler est 1.
big_tommy_7bb
82
@ tim_barber_7BB en fait, il est 10
heures
317

si vous vous souvenez du nombre entier de Pi, alors le nombre que vous recherchez est à la position 1,867,996,680 jusqu'à 1,867,996,689 des chiffres décimaux de Pi

La chaîne numérique 2147483647 apparaît au chiffre décimal de 1 867 996 680 de Pi. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

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

Diamantatos Paraskevas
la source
30
vous savez, quand j'ai commencé à lire votre réponse, je m'attendais à quelque chose de pratique, comme le 20e chiffre.
JqueryToAddNumbers
95
Cela semble plutôt cool. Avez-vous une autre règle de mémoire à retenir 1 867 996 680? J'ai du mal à me rappeler à quel indice commencer à chercher ....
Alderath
10
" si vous vous souvenez du numéro Pi entier ... " - non, vous ne pouvez pas, c'est irrationnel {comme peut-être un ou deux messages dans ce Q&R} 8-D
SlySven
10
@Alderath Je m'en souviens généralement comme les 10 décimales en sqrt (2) à partir du numéro de chiffre 380,630,713 ....
Henrik
2
@Alderath: La chaîne numérique 1867996680 apparaît au 380,630,713ème chiffre décimal de la racine carrée de 2.
Yair Halberstadt
290

Il s'agit de 10 chiffres, alors faites comme s'il s'agissait d'un numéro de téléphone (en supposant que vous soyez aux États-Unis). 214-748-3647. Je ne recommande pas de l'appeler.

WildJoe
la source
13
En parlant de s'en souvenir en tant que numéro de téléphone, il semble que certains spammeurs de téléphone l'utilisent: mrnumber.com/1-214-748-3647
Steven
8
"Il n'y a pas d'échange" 748 "à Dallas. Ce numéro est faux." - à partir de la page liée par shambleh
Tarnay Kálmán
104
@Steven, je ne pense pas que ce sont des spammeurs, juste des gens qui ont accidentellement stocké le numéro de téléphone au INTlieu de VARCHARdans MySQL.
Zarel
8
J'ai essayé de l'appeler. Il a sonné plusieurs fois puis est passé à la tonalité d'erreur. = (
Krythic
172

Plutôt que de le considérer comme un grand nombre, essayez de le décomposer et de rechercher des idées associées, par exemple:

  • 2 pauses maximum de billard (une pause maximale est de 147)
  • 4 ans (48 mois)
  • 3 ans (36 mois)
  • 4 ans (48 mois)

Ce qui précède s'applique au plus grand nombre négatif; positif est que moins un.

Peut-être que la ventilation ci-dessus ne sera plus mémorable pour vous (ce n'est guère excitant, n'est-ce pas!), Mais j'espère que vous pourrez trouver des idées qui le sont!

Luke Bennett
la source
99
C'est l'un des dispositifs mnémotechniques les plus compliqués que j'ai vus. Impressionnant.
Ben Hoffstein
9
Hé, des gens comme Derren Brown préconisent en fait ce genre d'approche - décomposer un nombre en quelque chose de aléatoire mais qui est plus mémorable qu'une simple charge de nombres: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/…
Luke Bennett
19
J'ai une meilleure mnémonique: tout ce dont vous avez besoin de vous souvenir est 2 et 31, car il est apparemment exactement 2 ^ 31! Oh, attendez ...
Tamas Czinege
28
@DrJokepu Je ne suis pas sûr de la priorité de l'opérateur ... Est-ce que cela signifie 2^(31!)ou (2^31)!?
Alderath
1
@Lucio Notez que ma réponse concerne en premier lieu le plus grand nombre négatif qui se termine par 48, pas 47
Luke Bennett
144

Plus grande valeur négative (32 bits): -2147483648
(1 << 31)

Plus grande valeur positive (32 bits): 2147483647
~ (1 << 31)

Mnémonique: "ivre AKA cornée"

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
la source
27
Les mondes les plus difficiles à rappeler Mnémonique. Si vous pouvez mémoriser 0118 999 88199 9119 752 ... 3, vous pouvez le mémoriser.
BenM
11
@Rondles Je pense que c'est en fait 7253 à la fin.
Tim Tisdall
21
Nan. L'âge de boire est de 18 ans ici ... On dirait que je ne peux pas utiliser ce mnémonique, ma vie est ruinée.
Joffrey
4
@Aaren Cordova Ils disaient que stackoverflow ne sera jamais drôle, ne sera rien de plus qu'un site de questions / réponses, je les pointe généralement vers cette réponse. Cette chose ne peut être créée qu'à l'intérieur d'un esprit de génie, je veux dire que c'est de l' Art.
Mohd Abdul Mujib
5
Le plus grand entier négatif de 32 bits, ou 64 bits d'ailleurs, est -1.
Fred Mitchell
75

Quoi qu'il en soit, prenez cette expression régulière (elle détermine si la chaîne contient un entier non négatif sous forme décimale qui n'est pas non plus supérieur à 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]

Peut-être que cela vous aiderait à vous souvenir.

Chizh
la source
12
Cela me semble beaucoup plus facile et amusant. En fait, c'est vraiment beaucoup plus facile que 2147483647. Ce serait d'une grande aide pour l'OP
Sнаđошƒаӽ
61

Voilà comment je me suis souvenu 2147483647:

  • 214 - parce que 2,14 est approximativement pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Écrivez-les horizontalement:

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

Vous avez maintenant 2147483647.

J'espère que cela aide au moins un peu.

Mikołaj Rozwadowski
la source
3
Joli! Je pense que la règle 214 devrait être pi - 1. De plus, le masque indique 68 plutôt que 64. =) Pour les mordus de l'aviation comme moi, la valeur 737 devrait être facile à retenir en l'associant au jet de ligne moyen de Boeing.
Vous pouvez aller plus loin. Supprimez la décimale et comparez pi et 2 ^ 31-1. Dans les mêmes positions, vous obtenez 141 vs 147, donc le dernier chiffre devient juste un 7. Puis 592 vs 483, tous sont à un chiffre l'un de l'autre. Et 643 vs 647, c'est que redevenir une chose 7.
Peter Cooper du
@PeterCooper Altho les décimales pour pi commencent par 1415926_5_35 (Notez le 5, pas un 4)
Moberg
15
Mon mnémonique est de prendre 4294967296 (ce qui est facile à retenir) et de diviser par 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

Donc, 2 ^ 31 (signé int max) est 2 ^ 30 (environ 1 milliard) fois 2 ^ 1 (2), soit environ 2 milliards. Et 2 ^ 32 est 2 ^ 30 * 2 ^ 2 soit environ 4 milliards. Cette méthode d'approximation est suffisamment précise, même jusqu'à environ 2 ^ 64 (où l'erreur atteint environ 15%).

Si vous avez besoin d'une réponse exacte, vous devez alors ouvrir une calculatrice.

Approximations pratiques de la capacité d'alignement des mots:

  • 2 ^ 16 ~ = 64 mille // uint16
  • 2 ^ 32 ~ = 4 milliards // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillions (aka 16 milliards de milliards ou 16 millions de milliards) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillions quintillion (alias 256 trillions trillions de trillions) // IPv6, GUID
Coin
la source
76
C'est ce que les fabricants de disques durs ont dit.
Scott Stafford
46

Prenez simplement une calculatrice décente et tapez "7FFFFFFF" en mode hexadécimal, puis passez en décimal.

2147483647.

Darron
la source
150
Toute calculatrice décente peut également faire 2 ^ 31.
Christoffer
17
Je ne sais pas 2 ^ 31 semble que le long chemin à faire: /
Etats
2
Ou souviens-toi juste de ça en hexadécimal
Vernon
4
Il suffit de l' écrire en hexadécimal. Ou Int32.MaxValue/numeric_limits<int32_t>::max()
sehe
8
@Christoffer Il s'agit en fait de 2 ^ 31 - 1 :)
kupsef
36

C'est à peu près 2.1 * 10^9. Pas besoin de connaître l'exact 2^{31} - 1 = 2,147,483,647.

C

Vous pouvez le trouver en C comme ça:

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

donne (enfin, sans le ,)

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

Vous pouvez également obtenir cela avec Java:

System.out.println(Integer.MAX_VALUE);

Mais gardez à l'esprit que les entiers Java sont toujours signés.

Python 2

Python a des entiers de précision arbitraires. Mais en Python 2, ils sont mappés sur des entiers C. Vous pouvez donc faire ceci:

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

Donc, Python passe longlorsque l'entier devient plus grand que2^31 -1

Martin Thoma
la source
La réponse Python est obsolète voir: stackoverflow.com/questions/13795758/…
NOhs
@NOhs J'apprécie le lien, mais ma réponse Python concerne "Python 2" (j'ajoute le 2 au titre de la section pour le rendre plus clair). Ma réponse n'est donc pas dépassée. (Mais Python 2, certes, l'est)
Martin Thoma
35

Voici un mnémonique pour se souvenir de 2 ** 31, soustrayez-en un pour obtenir la valeur entière maximale.

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

J'ai utilisé les pouvoirs de deux jusqu'à 18 assez souvent pour m'en souvenir, mais même je n'ai pas pris la peine de mémoriser 2 ** 31. Il est trop facile de calculer selon les besoins ou d'utiliser une constante, ou d'estimer comme 2G.

Mark Ransom
la source
3
Que faites-vous pour 2 ^ 10, 2 ^ 11, 2 ^ 12 ou 2 ^ 17 (qui ont tous des zéros)?
supercat
2
@supercat, je reformulerais a = 0 ou utiliser o = 0.
Mark Ransom
C'est génial. Merci, vous me sauvez la vie.
chenz
31

32 bits, un pour le signe, 31 bits d'information:

2^31 - 1 = 2147483647

Pourquoi -1?
Parce que le premier est zéro, le plus grand est donc le nombre moins un .

EDIT pour cantfindaname88

Le compte est 2 ^ 31 mais le plus grand ne peut pas être 2147483648 (2 ^ 31) car nous comptons à partir de 0, pas 1.

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

Une autre explication avec seulement 3 bits: 1 pour le signe, 2 pour l'information

2^2 - 1 = 3

Ci-dessous toutes les valeurs possibles avec 3 bits: (2 ^ 3 = 8 valeurs)

1: 100 ==> -4
2: 101 ==> -3
3: 110 ==> -2
4: 111 ==> -1
5: 000 ==>  0
6: 001 ==>  1
7: 010 ==>  2
8: 011 ==>  3
Aérospatial
la source
@ cantfindaname88: 2 ^ 31 = combinaisons totales, il varie donc de 0 à (2 ^ 31 -1). Oui, le premier est 0.
Luciano
30

Eh bien, il a 32 bits et peut donc stocker 2 ^ 32 valeurs différentes. La moitié d'entre eux sont négatifs.

La solution est de 2147483647

Et le plus bas est −2 147 483 648.

(Notez qu'il existe une autre valeur négative.)

Sarien
la source
Il a 32 bits et peut donc stocker 2 ^ 32 valeurs. Pas moins.
JB.
28

Eh bien, à part les blagues, si vous cherchez vraiment une règle de mémoire utile, il y en a une que j'utilise toujours pour me souvenir des grands nombres.

Vous devez décomposer votre numéro en parties de 3 à 4 chiffres et les mémoriser visuellement en utilisant la projection sur le clavier de votre téléphone portable. Il est plus facile de montrer sur une photo:

entrez la description de l'image ici

Comme vous pouvez le voir, il ne vous reste plus qu'à vous souvenir de 3 formes, dont 2 ressemblent à un Tetris L et une ressemble à une tique . Ce qui est certainement beaucoup plus facile que de mémoriser un nombre à 10 chiffres.

Lorsque vous devez rappeler le numéro, rappelez-vous simplement les formes, imaginez / regardez sur un clavier de téléphone et projetez les formes dessus. Peut-être qu'au début, vous devrez regarder le clavier, mais après un peu de pratique, vous vous souviendrez que les nombres vont de haut en bas à droite, vous pourrez donc l'imaginer simplement dans votre tête.

Assurez-vous simplement de vous souvenir de la direction des formes et du nombre de chiffres dans chaque forme (par exemple, dans l'exemple 2147483647, nous avons un Tetris L à 4 chiffres et un L à 3 chiffres).

Vous pouvez utiliser cette technique pour mémoriser facilement tous les numéros importants (par exemple, je me suis souvenu de mon numéro de carte de crédit à 16 chiffres, etc.).

Ivan Yurchenko
la source
Bonne idée! La forme 1 vous donne 2147, la forme 2 vous donne 483 et la forme 3 est censée donner 647, mais comme dessiné, cela pourrait être interprété comme 6 5 47. Comment savoir quand inclure tous les nombres croisés (comme dans la forme 1 ) vs quand en sauter (comme dans la forme 3)? Vous devez également mémoriser que les formes codent respectivement 4, 3 et 3 chiffres. Ou vous pouvez dessiner la forme 3 avec un arc de 6 à 4 au lieu d'une ligne droite.
jskroch
@Squinch Eh bien, en particulier pour se souvenir de int.Max, cela ne devrait pas être un problème car vous savez peut-être qu'il s'agit d'environ 2 milliards, donc il contient 10 chiffres (et cela signifie que si la première forme a 4 chiffres, le deuxième et le troisième les formes en ont 3 en conséquence). Cependant, c'est un bon point si vous souhaitez utiliser cette approche pour n'importe quel nombre. De plus, il y a des nombres qui sont difficiles à retenir en utilisant cette façon (par exemple 1112 ou quelque chose). D'un autre côté, il ne devrait pas être difficile de se souvenir de ce nombre de toute façon. Je dirais donc que cela dépend de vous, faites-moi savoir si vous trouvez quelque chose d'intéressant pour cela. :)
Ivan Yurchenko
Oui, je pensais utiliser cette méthode pour rappeler une séquence arbitraire de chiffres, mais pour cette valeur int.Max particulière, votre méthode fonctionne assez bien. Comme vous l'avez dit, les chiffres répétés sont un problème. En fait, toute séquence répétée (comme 2323) est un problème. Toute séquence qui se croise (comme 2058) est difficile à dessiner. Toute technique de mémorisation nécessite que vous vous souveniez de plusieurs informations. C'est votre préférence personnelle quels types d'informations vous conviennent le mieux.
jskroch
1
C'est ainsi que je me souviens des codes PIN et similaires, mais tout d'un coup, vous devez le saisir sur votre ordinateur et vous rendre compte que le pavé numérique est inversé verticalement. C'est donc un peu un défi.
nibarius
Quelqu'un à Dallas, au Texas , a reçu de nombreux appels téléphoniques étranges et n'a aucune idée que vous êtes @IvanYurchenko à blâmer.
Bob Stein
21

La façon la plus simple de le faire pour les entiers est d'utiliser hexadécimal, à condition qu'il n'y ait pas quelque chose comme Int.maxInt (). La raison en est la suivante:

Max valeurs non signées

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

Valeurs signées, en utilisant 7F comme valeur signée maximale

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

Valeurs signées, en utilisant 80 comme valeur signée maximale

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

Comment cela marche-t-il? C'est très similaire à la tactique binaire, et chaque chiffre hexadécimal fait exactement 4 bits. De plus, de nombreux compilateurs prennent en charge l'hex beaucoup mieux que le binaire.

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

Donc 7F est égal à 01111111 / 7FFF est égal à 0111111111111111. De plus, si vous l'utilisez pour une "constante incroyablement élevée", 7F ... est un hex sûr, mais il est assez facile d'essayer 7F et 80 et de simplement les imprimer à votre écran pour voir lequel c'est.

0x7FFF + 0x0001 = 0x8000, donc votre perte n'est qu'un nombre, donc l'utilisation de 0x7F ... n'est généralement pas un mauvais compromis pour un code plus fiable, surtout une fois que vous commencez à utiliser 32 bits ou plus

Joe Plante
la source
21

Commencez par écrire 47 deux fois (vous aimez l' agent 47 , n'est-ce pas?), En gardant les espaces comme indiqué (chaque tiret est un emplacement pour un seul chiffre. 2 premiers emplacements, puis 4)

--47----47

Pensez que vous avez 12en main (car 12 = une douzaine). Multipliez-le par le 4premier chiffre du numéro de l'agent 47 47, et placez le résultat à droite de la première paire que vous avez déjà

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

Ensuite, multipliez 12par 3(afin de créer le deuxième chiffre du numéro de l'agent 47, qui est 7, vous avez besoin 7 - 4 = 3) et placez le résultat à droite des 2 premières paires, le dernier emplacement de paire

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

Enfin, faites glisser les chiffres un par un depuis votre main à partir du chiffre le plus à droite (2 dans ce cas) et placez-les dans le premier emplacement vide que vous obtenez

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

Voilà! Pour la limite négative, vous pouvez considérer cela comme 1 de plus en valeur absolue que la limite positive.

Pratiquez plusieurs fois et vous aurez le coup!

Sнаđошƒаӽ
la source
"1 de plus en valeur absolue que la limite positive" m'a obtenu.
Navin
20

2 Go

(y a-t-il une longueur minimale pour les réponses?)

Rune
la source
18
Cela ne devrait-il pas être GiB?
Jouke van der Maas
9
@JoukevanderMaas - En fait, ce devrait être 4B.
Ted Hopp,
1
C'est pourquoi la limite de RAM que vous pouvez avoir sur un ordinateur 32 bits est de 4 Go
Serj Sagan
3
la valeur de 4 Go est correcte avec des entiers non signés. si vous avez un int signé, vous devez évidemment diviser par 2 pour obtenir la valeur maximale possible
SwissCoder
3
En 32 bits, il y a 2 Go de réserve d'espace mémoire pour le processus utilisateur et 2 Go pour le noyau. Il peut être configuré pour que le noyau ait seulement 1 Go réservé
Rune
15

En supposant que .NET -

Console.WriteLine(Int32.MaxValue);
Kev
la source
15

Si vous connaissez par cœur votre table ASCII et non MaxInt:
!GH6G = 21 47 48 36 47

Mark Hurd
la source
Quand j'ai écrit cette réponse, je ne savais pas que GH6G avait autant de succès sur Google, et maintenant je l'ai utilisé moi-même :-)
Mark Hurd
15

La meilleure règle pour la mémoriser est:
21 (nombre magique!)
47 (rappelez-vous juste)
48 (séquentiel!)
36 (21 + 15, les deux magies!)
47 à nouveau

Il est également plus facile de mémoriser 5 paires que 10 chiffres.

Leandro
la source
14

La façon la plus simple de se souvenir est de regarder std::numeric_limits< int >::max()

Par exemple (à partir 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
la source
14

Fait intéressant, Int32.MaxValue a plus de caractères que 2147486647.

Mais là encore, nous avons l'achèvement du code,

Donc je suppose que tout ce que nous avons vraiment à mémoriser Int3<period>M<enter>, c'est seulement 6 caractères à taper dans Visual Studio.

MISE À JOUR Pour une raison quelconque, j'ai été rétrogradé. La seule raison pour laquelle je peux penser, c'est qu'ils n'ont pas compris ma première déclaration.

"Int32.MaxValue" prend au plus 14 caractères à taper. 2.147.486.647 prend 10 ou 13 caractères à taper selon que vous insérez ou non les virgules.

Pas moi
la source
2
Mais ce qui compte, ce n'est pas le nombre de caractères que vous devez taper, mais comment le mémoriser. Je suis sûr qu'il Iwannagohomeest plus facile de mémoriser que 298347829. Aucune raison pour un -1, cependant.
glglgl
3
Cela pourrait être inférieur à cela, créez simplement votre propre extrait de valeur maximale, "imv" <tab> <tab> peut-être?
BradleyDotNET du
4
Caractères !=frappés. Pour ce pauvre utilisateur .Net, c'est in+ .+ ma+ Return.
Michael - Où est Clay Shirky
11

N'oubliez pas que 2 ^ (10 * x) est environ 10 ^ (3 * x) - vous êtes probablement déjà habitué à cela avec des kilo-octets / kibio, etc. C'est-à-dire:

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

Puisqu'un int utilise 31 bits (+ ~ 1 bit pour le signe), il suffit de doubler 2 ^ 30 pour obtenir environ 2 milliards. Pour un entier non signé utilisant 32 bits, doublez à nouveau pour 4 milliards. Le facteur d'erreur augmente plus vous augmentez bien sûr, mais vous n'avez pas besoin que la valeur exacte soit mémorisée (si vous en avez besoin, vous devez de toute façon utiliser une constante prédéfinie). La valeur approximative est suffisamment bonne pour remarquer quand quelque chose pourrait être dangereusement proche d'un débordement.

Brian
la source
10
Hors sujet: 2 ^ 4 = 4 ^ 2, donc l'exponentiation est commutative!
Adam Liss
10
@ Pier-OlivierThibault non, je l'utilise tout le temps! maintenant, je dois découvrir pourquoi tous mes calculs se trompent. probablement quelque chose à voir avec des erreurs de multiplication. de toute façon, au revoir!
tckmn
9

voici comment je me souviens de 2147483647

Dans un quartier de savane éloignée, le trio Optimus hexa quarante septenaires

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

Que voulez-vous dire? Il devrait être assez facile de se rappeler qu'il s'agit de 2 ^ 32. Si vous souhaitez qu'une règle mémorise la valeur de ce nombre, une règle pratique est pour la conversion entre binaire et décimal en général:

2 ^ 10 ~ 1000

ce qui signifie 2 ^ 20 ~ 1 000 000

et 2 ^ 30 ~ 1 000 000 000

Le double (2 ^ 31) équivaut à environ 2 milliards, et le double (2 ^ 32) à 4 milliards.

C'est un moyen facile d'obtenir une estimation approximative de tout nombre binaire. 10 zéros en binaire deviennent 3 zéros en décimal.

jalf
la source
7
mais ce n'est pas 2 ^ 32 - c'est (2 ^ 31) -1
Steve Folly
6

Dans Objective-C (iOS & OSX), rappelez-vous simplement ces 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
la source
5

Int32 signifie que vous disposez de 32 bits pour stocker votre numéro. Le bit le plus élevé est le bit de signe, cela indique si le nombre est positif ou négatif. Vous avez donc 2 ^ 31 bits pour les nombres positifs et négatifs.

Avec zéro étant un nombre positif, vous obtenez la plage logique de (mentionnée précédemment)

+2147483647 à -2147483648

Si vous pensez que c'est trop petit, utilisez Int64:

+9223372036854775807 à -9223372036854775808

Et pourquoi diable vous voulez vous souvenir de ce numéro? À utiliser dans votre code? Vous devez toujours utiliser Int32.MaxValue ou Int32.MinValue dans votre code car ce sont des valeurs statiques (dans le noyau .net) et donc plus rapides à utiliser que la création d'un nouvel int avec du code.

Ma déclaration: si vous connaissez ce numéro par la mémoire .. vous venez de montrer!


la source
2
La plupart des ordinateurs modernes stockent les numéros au format «deux compliments». Le bit le plus élevé (et non le plus bas) est le signe. La chose intéressante avec le complément à deux est que les nombres -ve sont gérés par les règles de débordement naturel du CPU. ie 0xFF est 8 bits -1, ajoutez cela à 0x01 (+1) et vous obtenez 0x100. Tronquez les bits supérieurs à 8 à 0x00 et vous avez votre réponse.
Tom Leys
5

Rappelez-vous ceci: 21 IQ ITEM 47

Il peut être décodé avec n'importe quel clavier téléphonique, ou vous pouvez simplement en écrire un vous-même sur un papier.

Pour me souvenir de "21 IQ ITEM 47", je choisirais "Hitman: Codename 47 avait 21 missions, qui étaient chacune des IQ ITEM".

Ou "Je nettoie les dents à 21h47 tous les jours, car j'ai un QI élevé et je n'aime pas les articles dans ma bouche".

soprof
la source
Que voulez-vous dire de-encoded with any phone pad?
mcExchange