Qual è il valore massimo per un int32?


1380

Non riesco mai a ricordare il numero. Ho bisogno di una regola di memoria.


48
non firmato: 2³²-1 = 4 · 1024³-1; con segno: -2³¹ .. + 2³¹-1, poiché il bit di segno è il bit più alto. Basta imparare 2⁰ = 1 a 2¹⁰ = 1024 e combinare. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad

31
Ricordo generalmente che ogni 3 bit corrisponde a una cifra decimale. Questo mi porta al giusto ordine di grandezza: 32 bit sono 10 cifre.
Barmar,

8
@JoachimSauer può sicuramente aiutare il debug se impari a riconoscere almeno questo tipo di numeri.
Dunaril,

72
"se un disco si riempie, eliminando tutti gli mbyte verranno archiviati" (2 lettere, 1 lettera, 4 lettere, 7 lettere, 4 lettere, 8 lettere, 3 lettere, 6 lettere, 4 lettere, 7 lettere)
UltraCommit

8
Un caso, quando int32 non è abbastanza: bbc.com/news/world-asia-30288542
ingaham

Risposte:


5073

Sono 2.147.483.647. Il modo più semplice per memorizzarlo è tramite un tatuaggio.


83
Il mio mnemonico: 2 ^ 10 è molto vicino a 1000, quindi 2 ^ (3 * 10) è 1000 ^ 3 o circa 1 miliardo. Uno dei 32 bit viene utilizzato per il segno, quindi il valore massimo è in realtà solo 2 ^ 31, che è circa il doppio della quantità ottenuta per 2 ^ (3 * 10): 2 miliardi.
16807,

164
2147483647 senza virgole.
Vern D.

20
Basta usare: Integer.MAX_VALUEin Java.
Tim

184
Se ottieni il tatuaggio sul tuo viso, non dimenticare di invertirlo in modo che si legga correttamente allo specchio. Altrimenti vedrai 746.384.741,2 che è sbagliato e sarebbe imbarazzante.
Larry S,

127
2.147.483.647 = 0x7FFFFFFF, se vuoi ricordarlo, usa solo hex.
roottraveller,

493

La risposta più corretta che mi viene in mente è Int32.MaxValue.


18
Prima che esistesse, ho usato #define INT32_MIN e INT32_MAX in tutti i miei progetti.
WildJoe,

45
@CamiloMartin Hey. Mi risento. Non c'era proprio posto per altri tatuaggi. Ovviamente, il set di caratteri iso-8859-1 e Pi con 31415 decimali dovevano avere la priorità
sehe

3
Durante la programmazione: sì nel 99% dei casi. Ma potresti voler sapere che è qualcosa come ~ 2 miliardi per pianificare approcci di programmazione o quando si lavora con i dati, anche se è un numero molto grande. :)
Andre Figueiredo,

@sehe Ormai latin1 / Windows 1252 non sono obsoleti? Se non si adatta ai 7 byte di ASCII, non credo che meriti un posto nella memoria principale. Voglio dire ... tutte le pagine di codice UNICODE sono in qualche modo utili, ma oltre un meg di spazio skin sembra uno spreco. (Per non parlare del fatto che non include ancora glifi descrittivi per "pageup / pagedown" o "pagehome / pageend")

1
Questa proprietà potrebbe essere un buon consiglio in aggiunta alla menzione del numero corretto. Tuttavia, non mi piace questa risposta in quanto menziona solo un modo insostenibile di derterminare il valore e non menziona nemmeno per quali linguaggi di programmazione funziona, ...
Mozzbozz,

439

Se ritieni che il valore sia troppo difficile da ricordare nella base 10, prova la base 2: 1111111111111111111111111111111


145
@Nick Whaley: No, 1111111111111111111111111111111 è positivo. 11111111111111111111111111111111 sarebbe negativo :-)
Cagliata

58
Base 16 è ancora più semplice 7FFFFFFF
Nelson Galdeman Graziano,

34
@Curd 11111111111111111111111111111111come numero di base 2 sarebbe comunque positivo (un esempio negativo in base-2 sarebbe -1) . Quella sequenza di bit è negativa solo se rappresenta un complemento a 32 bit 2 :)
BlueRaja - Danny Pflughoeft

143
Il più facile da ricordare sarà la base 2.147.483.647. Quindi tutto ciò che devi ricordare è 1.
big_tommy_7bb

82
@ tim_barber_7BB in realtà, sono le 10.
fscheidl,

317

se riesci a ricordare l'intero numero Pi, il numero che stai cercando è nella posizione 1.867.996.680 fino a 1.867.996.689 delle cifre decimali di Pi

La stringa numerica 2147483647 appare alla cifra decimale di 1.867.996.680. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

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


30
sai, quando ho iniziato a leggere la tua risposta mi aspettavo qualcosa di pratico, come la 20a cifra.
JqueryToAddNumbers

95
Sembra abbastanza bello. Hai un'altra regola di memoria da ricordare 1.867.996.680? Trovo difficile ricordare a quale indice iniziare a cercare ...
Alderath,

10
" se riesci a ricordare l'intero numero Pi ... " - no, non puoi, è irrazionale {come probabilmente uno o due post in questo Q & As} 8-D
SlySven

10
@Alderath di solito lo ricordo come i 10 decimali in sqrt (2) a partire dal numero di cifre 380.630.713 ....
Henrik

2
@Alderath: la stringa numerica 1867996680 appare alla cifra decimale 380.630.713 decima della radice quadrata di 2.
Yair Halberstadt

290

Sono 10 cifre, quindi fai finta che sia un numero di telefono (supponendo che tu sia negli Stati Uniti). 214-748-3647. Non consiglio di chiamarlo.


13
A proposito di ricordarlo come numero di telefono, sembra che potrebbero esserci degli spammer telefonici che lo usano: mrnumber.com/1-214-748-3647
Steven

8
"Non c'è scambio" 748 "a Dallas. Questo numero è falso." - dalla pagina collegata da shambleh
Tarnay Kálmán il

104
@Steven Non penso che siano spammer, ma solo persone che hanno accidentalmente memorizzato il numero di telefono INTanziché VARCHARin MySQL.
Zarel,

8
Ho provato a chiamarlo. Suonò alcune volte, poi passò al tono di composizione dell'errore. = (
Krythic,

172

Invece di pensarlo come un unico numero, prova a scomporlo e cercare idee associate, ad esempio:

  • 2 pause massimo per snooker (una pausa massima è 147)
  • 4 anni (48 mesi)
  • 3 anni (36 mesi)
  • 4 anni (48 mesi)

Quanto sopra si applica al maggior numero negativo; positivo è quello meno.

Forse la ripartizione di cui sopra non sarà più memorabile per te (non è affatto eccitante!), Ma spero che tu possa trovare alcune idee che lo siano!


99
Questo è uno dei dispositivi pneumatici più complicati che abbia mai visto. Degno di nota.
Ben Hoffstein,

9
Heh, artisti del calibro di Derren Brown sostengono in realtà questo tipo di approccio: suddividere un numero in qualcosa di casuale ma che è più memorabile di un semplice numero di numeri: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/…
Luke Bennett,

19
Ho un mnemonico migliore: tutto ciò che devi ricordare sono 2 e 31, poiché è apparentemente esattamente 2 ^ 31! Oh, aspetta ...
Tamas Czinege,

28
@DrJokepu Non sono sicuro della precedenza dell'operatore ... Significa 2^(31!)o (2^31)!?
Alderath,

1
@Lucio Nota che la mia risposta si riferisce in primo luogo al maggior numero negativo che termina con 48, non 47
Luke Bennett,

144

Valore negativo (32 bit) più grande: -2147483648
(1 << 31)

Valore positivo (32 bit) più grande: 2147483647
~ (1 << 31)

Mnemonico: "ubriaco AKA cornea"

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
I mondi più difficili da ricordare di Mnemonic. Se riesci a memorizzare 0118 999 88199 9119 752 ... 3 puoi memorizzarlo.
BenM,

11
@Rondles Penso che in realtà sia 7253 alla fine.
Tim Tisdall,

21
No. L'età per bere ha 18 anni qui ... Sembra che non possa usare questo mnemonico, la mia vita è rovinata.
Joffrey,

4
@Aaren Cordova Dicevano che stackoverflow non sarà mai divertente, non è altro che un sito di domande e risposte, in genere le indico a questa risposta. Questa cosa può essere creata solo all'interno di una mente geniale, intendo che questa è Arte.
Mohd Abdul Mujib,

5
Il numero intero negativo a 32 bit più grande, o 64 bit, è -1.
Fred Mitchell,

75

Ad ogni modo, prendi questa regex (determina se la stringa contiene un numero intero non negativo in forma decimale che non è anche maggiore di 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]

Forse ti aiuterebbe a ricordare.


12
Mi sembra molto più facile e divertente. In realtà è molto più semplice di 2147483647. Ciò sarebbe di grande aiuto per l'OP
Sнаđошƒаӽ,

61

È così che mi sono ricordato 2147483647:

  • 214 - perché 2.14 è approssimativamente pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Scrivi questi in orizzontale:

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

Ora hai 2147483647.

Spero che questo aiuti almeno un po '.


3
Ben fatto! Penso che la regola 214 dovrebbe essere pi - 1. Anche la maschera mostra 68 anziché 64. =) Per gli appassionati di aviazione come me, il valore 737 dovrebbe essere facile da ricordare associandolo al jet di linea di medie dimensioni di Boeing.

Puoi andare oltre. Rilascia il decimale e confronta pi e 2 ^ 31-1. Nelle stesse posizioni ottieni 141 contro 147, quindi l'ultima cifra diventa appena un 7. Quindi 592 vs 483, sono tutti a una cifra l'una dall'altra. E 643 vs 647, è di nuovo diventato 7.
Peter Cooper,

@PeterCooper Altho i decimali per pi iniziano con 1415926_5_35 (nota il 5, non un 4)
Moberg,

15
Il mio mnemonico è prendere 4294967296 (che è facile da ricordare) e dividere per 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

Quindi, 2 ^ 31 (int int max) è 2 ^ 30 (circa 1 miliardo) volte 2 ^ 1 (2), o circa 2 miliardi. E 2 ^ 32 è 2 ^ 30 * 2 ^ 2 o circa 4 miliardi. Questo metodo di approssimazione è abbastanza accurato fino a circa 2 ^ 64 (dove l'errore aumenta a circa il 15%).

Se hai bisogno di una risposta esatta, dovresti prendere una calcolatrice.

Pratiche approssimazioni di capacità allineate a parole:

  • 2 ^ 16 ~ = 64 mila // uint16
  • 2 ^ 32 ~ = 4 miliardi // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintilioni (ovvero 16 miliardi di miliardi o 16 milioni di trilioni) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintilioni di quintilioni (ovvero 256 trilioni di trilioni di miliardi) // IPv6, GUID

76
Questo è ciò che hanno detto i produttori di dischi rigidi.
Scott Stafford,

46

Basta prendere una calcolatrice decente e digitare "7FFFFFFF" in modalità esadecimale, quindi passare al decimale.

2147483647.


150
Qualsiasi calcolatrice decente può fare anche 2 ^ 31.
Christoffer,

17
Non so 2 ^ 31 sembra che la strada più lunga per farlo: /
Uniti

2
O semplicemente ricordalo in esadecimale
Vernon il

4
Solo ... scrivilo in esadecimale. O Int32.MaxValue/numeric_limits<int32_t>::max()
vedi il

8
@Christoffer In realtà è 2 ^ 31 - 1 :)
kupsef,

36

Si tratta 2.1 * 10^9. Non c'è bisogno di sapere l'esatto 2^{31} - 1 = 2,147,483,647.

C

Puoi trovarlo in C in quel modo:

#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à (beh, senza il ,)

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";

Giava

Puoi ottenerlo anche con Java:

System.out.println(Integer.MAX_VALUE);

Ma tieni presente che gli interi Java sono sempre firmati.

Python 2

Python ha numeri interi di precisione arbitraria. Ma in Python 2, sono mappati su numeri interi C. Quindi puoi farlo:

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

Quindi Python passa a longquando l'intero diventa più grande di2^31 -1


La risposta Python è vedere obsoleto: stackoverflow.com/questions/13795758/...
NOhs

@NOhs Apprezzo il collegamento, ma la mia risposta Python riguarda "Python 2" (aggiungo il 2 al titolo della sezione per renderlo più chiaro). Quindi la mia risposta non è obsoleta. (Ma è vero Python 2)
Martin Thoma il

35

Ecco un mnemonico per ricordare 2 ** 31, sottrarre uno per ottenere il valore intero massimo.

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

Ho usato i poteri da due a 18 abbastanza spesso per ricordarli, ma anche non mi sono preoccupato di memorizzare 2 ** 31. È troppo facile calcolare secondo necessità o usare una costante o stimare come 2G.


3
Cosa fai per 2 ^ 10, 2 ^ 11, 2 ^ 12 o 2 ^ 17 (che hanno tutti zero)?
supercat,

2
@supercat Rifarei a = 0 o userei o = 0.
Mark Ransom,

Questo è bellissimo. Grazie, mi hai salvato la vita.
chenz

31

32 bit, uno per il segno, 31 bit di informazioni:

2^31 - 1 = 2147483647

Perché -1?
Perché il primo è zero, quindi il più grande è il conteggio meno uno .

EDIT per cantfindaname88

Il conteggio è 2 ^ 31 ma il massimo non può essere 2147483648 (2 ^ 31) perché contiamo da 0, non 1.

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

Un'altra spiegazione con solo 3 bit: 1 per il segno, 2 per l'informazione

2^2 - 1 = 3

Di seguito tutti i possibili valori con 3 bit: (2 ^ 3 = 8 valori)

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 = combinazioni totali, quindi varia da 0 a (2 ^ 31 -1). Sì, il primo è 0.
Luciano,

30

Bene, ha 32 bit e quindi può memorizzare 2 ^ 32 valori diversi. La metà di questi sono negativi.

La soluzione è 2.147.483.647

E il più basso è -2,147,483,648.

(Si noti che esiste un altro valore negativo.)


Ha 32 bit e quindi può memorizzare 2 ^ 32 valori. Non di meno.
JB.

28

Bene, a parte le battute, se stai davvero cercando un'utile regola di memoria, ce n'è una che uso sempre per ricordare grandi numeri.

Devi scomporre il tuo numero in parti di 3-4 cifre e ricordarle visivamente usando la proiezione sulla tastiera del tuo cellulare. È più facile mostrare su un'immagine:

inserisci qui la descrizione dell'immagine

Come puoi vedere, d'ora in poi devi solo ricordare 3 forme, 2 di loro sembrano un Tetris L e uno sembra un segno di spunta . Che è sicuramente molto più facile che memorizzare un numero di 10 cifre.

Quando è necessario richiamare il numero, basta richiamare le forme, immaginare / guardare sulla tastiera di un telefono e proiettare le forme su di esso. Forse inizialmente dovrai guardare la tastiera, ma dopo solo un po 'di pratica, ricorderai che i numeri vanno da in alto a sinistra a in basso a destra in modo da poterlo semplicemente immaginare nella tua testa.

Assicurati solo di ricordare la direzione delle forme e il numero di cifre in ciascuna forma (ad esempio, nell'esempio 2147483647 abbiamo un Tetris L a 4 cifre e una L a 3 cifre).

Puoi usare questa tecnica per ricordare facilmente qualsiasi numero importante (ad esempio, ho ricordato il mio numero di carta di credito a 16 cifre ecc.).


Bella idea! Shape 1 ti dà 2147, Shape 2 ti dà 483 e Shape 3 dovrebbe dare 647, ma come disegnato, potrebbe essere interpretato come 6 5 47. Come faccio a sapere quando includere tutti i numeri incrociati (come in Shape 1 ) vs. quando saltare alcuni (come in Shape 3)? Devi anche ricordare che le forme codificano rispettivamente 4, 3 e 3 cifre. Oppure potresti disegnare Shape 3 con un arco da 6 a 4 invece di una linea retta.
Jskroch,

@Squinch Bene, in particolare per ricordare int.Max non dovrebbe essere un problema in quanto potresti sapere che è circa 2 miliardi, quindi contiene 10 numeri (e ciò significa che se la prima forma ha 4 numeri, la seconda e la terza le forme ne hanno 3 di conseguenza). Tuttavia, questo è un buon punto se si desidera utilizzare questo approccio per qualsiasi numero. Inoltre, ci sono numeri che sono difficili da ricordare usando in questo modo (cioè 1112 o qualcosa del genere). D'altra parte, non dovrebbe essere difficile ricordare tale numero comunque. Quindi direi che dipende da te, fammi sapere se ti viene in mente qualcosa di interessante per questo. :)
Ivan Yurchenko,

Sì, stavo pensando di usare questo metodo per richiamare una sequenza arbitraria di cifre, ma per questo particolare valore int.Max, il tuo metodo funziona abbastanza bene. Come hai detto, le cifre ripetute sono un problema. In effetti, qualsiasi sequenza ripetuta (come 2323) è un problema. Ogni sequenza che si incrocia (come il 2058) è difficile da disegnare. Qualsiasi tecnica di memorizzazione richiede di ricordare diverse informazioni. È la preferenza personale quali tipi di informazioni sono più adatti alla tua testa.
Jskroch,

1
Questo è il modo in cui ricordo i codici pin e simili, ma all'improvviso è necessario digitarlo sul computer e rendersi conto che il tastierino numerico è capovolto verticalmente. Quindi è un po 'una sfida.
nibario

Qualcuno a Dallas, in Texas , ha ricevuto molte strane telefonate e non ha idea che tu abbia la colpa a @IvanYurchenko.
Bob Stein,

21

Il modo più semplice per eseguire questa operazione per gli interi è utilizzare esadecimali, a condizione che non esista Int.maxInt (). Il motivo è questo:

Valori massimi non firmati

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

Valori firmati, utilizzando 7F come valore massimo firmato

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

Valori firmati, usando 80 come valore massimo firmato

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

Come funziona? Questo è molto simile alla tattica binaria e ogni cifra esadecimale è esattamente 4 bit. Inoltre, molti compilatori supportano hex molto meglio di quanto supportino binario.

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

Quindi 7F è uguale a 01111111 / 7FFF è uguale a 0111111111111111. Inoltre, se lo stai usando per "costante follemente alta", 7F ... è esadecimale sicuro, ma è abbastanza facile provare 7F e 80 e semplicemente stamparli sullo schermo per vedere quale è.

0x7FFF + 0x0001 = 0x8000, quindi la tua perdita è solo un numero, quindi usando 0x7F ... di solito non è un cattivo compromesso per un codice più affidabile, specialmente quando inizi a usare 32 bit o più


21

Prima scrivi 47 due volte (ti piace l' Agente 47 , giusto?), Mantenendo gli spazi come mostrato (ogni trattino è uno slot per una singola cifra. Prima 2 slot, quindi 4)

--47----47

Pensi di avere 12in mano (perché 12 = una dozzina). Moltiplicalo per 4, prima cifra del numero dell'Agente 47, cioè 47e posiziona il risultato a destra della prima coppia che hai già

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

Quindi moltiplica 12per 3(per creare la seconda cifra del numero dell'Agente 47, che è 7, è necessario 7 - 4 = 3) e metti il ​​risultato a destra delle prime 2 coppie, l'ultima coppia di slot

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

Infine trascina le cifre una ad una dalla tua mano iniziando dalla cifra più a destra (2 in questo caso) e posizionale nel primo slot vuoto che ottieni

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

Ecco qui! Per limite negativo, puoi considerarlo come 1 in più in valore assoluto rispetto al limite positivo.

Esercitati un paio di volte e te ne renderai conto!


"1 in più in valore assoluto rispetto al limite positivo" mi ha procurato.
Navin,

20

2GB

(esiste una lunghezza minima per le risposte?)


18
Non dovrebbe essere GiB?
Jouke van der Maas,

9
@JoukevanderMaas - In realtà, dovrebbe essere 4B.
Ted Hopp,

1
Ecco perché il limite di RAM che puoi avere su un computer a 32 bit è di 4 GB
Serj Sagan,

3
il valore di 4 GB è corretto con numeri interi senza segno. se hai un int firmato, devi ovviamente dividere per 2 per ottenere il valore massimo possibile
SwissCoder

3
A 32 bit sono presenti 2 GB di spazio di memoria per il processo utente e 2 GB per il kernel. Può essere configurato in modo che il kernel abbia solo 1 GB riservato
Rune

15

Supponendo .NET -

Console.WriteLine(Int32.MaxValue);

15

Se ti capita di conoscere a memoria la tua tabella ASCII e non MaxInt:
!GH6G = 21 47 48 36 47


Quando ho scritto questa risposta non sapevo che GH6G avesse avuto così tanti successi su Google, e ora l'ho usato da solo :-)
Mark Hurd

15

La migliore regola per memorizzarla è:
21 (numero magico!)
47 (ricordalo)
48 (sequenziale!)
36 (21 + 15, entrambi magici!)
47 di nuovo

Inoltre è più facile ricordare 5 coppie di 10 cifre.


14

Il modo più semplice da ricordare è guardare std::numeric_limits< int >::max()

Ad esempio ( da 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

È interessante notare che Int32.MaxValue ha più caratteri di 2.147.486.647.

Ma poi di nuovo, abbiamo il completamento del codice,

Quindi suppongo che tutto ciò che dobbiamo davvero memorizzare è Int3<period>M<enter>, che è solo 6 personaggi da scrivere in Visual Studio.

AGGIORNAMENTO Per qualche motivo sono stato sottoposto a downgrade. L'unica ragione a cui riesco a pensare è che non hanno capito la mia prima affermazione.

"Int32.MaxValue" richiede al massimo 14 caratteri per digitare. 2.147.486.647 richiedono 10 o 13 caratteri per digitare a seconda che si inseriscano le virgole o meno.


2
Ma ciò che conta non è quanti caratteri devi digitare, ma come memorizzarlo. Sono sicuro che Iwannagohomeè più facile da ricordare di 298347829. Nessun motivo per -1, tuttavia.
glglgl

3
Potrebbe essere inferiore a quello, basta creare il proprio frammento di valore massimo, "imv" <tab> <tab> forse?
BradleyDotNET il

4
Personaggi !=sequenze di tasti. Per questo povero utente .Net, è in+ .+ ma+ Return.
Michael - Dov'è Clay Shirky il

11

Ricorda solo che 2 ^ (10 * x) è circa 10 ^ (3 * x) - probabilmente ti sei già abituato con kilobyte / kibibyte ecc. Cioè:

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

Poiché un int utilizza 31 bit (+ ~ 1 bit per il segno), basta raddoppiare 2 ^ 30 per ottenere circa 2 miliardi. Per un int senza segno che utilizza 32 bit, raddoppiare nuovamente per 4 miliardi. Il fattore di errore aumenta con il passare del tempo, ovviamente, ma non è necessario memorizzare il valore esatto (se ne hai bisogno, dovresti comunque utilizzare una costante predefinita). Il valore approssimativo è abbastanza buono da notare quando qualcosa potrebbe essere pericolosamente vicino allo straripamento.


10
Offtopic: 2 ^ 4 = 4 ^ 2, quindi l'espiazione è commutativa!
Adam Liss,

10
@ Pier-OlivierThibault no, lo uso sempre! ora devo scoprire perché tutta la mia matematica sta venendo fuori sbagliata. probabilmente qualcosa a che fare con gli errori di moltiplicazione. comunque ciao!
martedì

9

questo è come lo faccio per ricordare 2.147.483.647

In un quarto di savana lontana, un trio di ottimus ha troncato quaranta settenari

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

7

Cosa intendi? Dovrebbe essere abbastanza facile ricordare che è 2 ^ 32. Se vuoi che una regola memorizzi il valore di quel numero, una pratica regola empirica è per la conversione tra binario e decimale in generale:

2 ^ 10 ~ 1000

il che significa 2 ^ 20 ~ 1.000.000

e 2 ^ 30 ~ 1.000.000.000

Raddoppia che (2 ^ 31) è approssimativamente 2 miliardi, e raddoppiando di nuovo (2 ^ 32) è 4 miliardi.

È un modo semplice per ottenere una stima approssimativa di qualsiasi numero binario. 10 zeri in binario diventano 3 zeri in decimale.


7
ma non è 2 ^ 32 - è (2 ^ 31) -1
Steve Folly

6

In Objective-C (iOS e OSX), ricorda solo queste macro:

#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 che hai 32 bit disponibili per memorizzare il tuo numero. Il bit più alto è il bit di segno, questo indica se il numero è positivo o negativo. Quindi hai 2 ^ 31 bit per i numeri positivi e negativi.

Con zero che è un numero positivo si ottiene l'intervallo logico di (menzionato prima)

Da +2147483647 a -2147483648

Se pensi che sia troppo piccolo, usa Int64:

Da +9223372036854775807 a -9223372036854775808

E perché diavolo vuoi ricordare questo numero? Da usare nel tuo codice? Dovresti sempre usare Int32.MaxValue o Int32.MinValue nel tuo codice poiché questi sono valori statici (all'interno del core .net) e quindi più veloci nell'uso rispetto alla creazione di un nuovo int con codice.

La mia affermazione: se conosci questo numero dalla memoria .. ti stai solo mettendo in mostra!


2
La maggior parte dei computer moderni memorizza i numeri nel formato "due complimenti". Il bit più alto (non più basso) è il segno. La cosa bella con due complementi è che -ve i numeri sono gestiti dalle regole di overflow naturale della CPU. cioè 0xFF è 8 bit -1, aggiungilo a 0x01 (+1) e ottieni 0x100. Troncare i bit sopra 8 a 0x00 e avrai la tua risposta.
Tom Leys,

5

Ricorda questo: 21 IQ ITEM 47

Può essere decodificato con qualsiasi pad del telefono, oppure puoi semplicemente scriverne uno da solo su un foglio.

Per ricordare "21 IQ ITEM 47", andrei con "Hitman: il nome in codice 47 aveva 21 missioni, che erano ciascuna delle voci del QI da sole".

Oppure "Pulisco i denti ogni giorno alle 21:47, perché ho un QI elevato e non mi piacciono gli oggetti in bocca".


Con cosa intendi de-encoded with any phone pad?
mcExchange,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.