Was ist der Maximalwert für ein int32?


1380

Ich kann mich nie an die Nummer erinnern. Ich brauche eine Speicherregel.


48
ohne Vorzeichen: 2³²-1 = 4 · 1024³-1; Vorzeichen: -2³¹ .. + 2³¹-1, da das Vorzeichenbit das höchste Bit ist. Lernen Sie einfach 2⁰ = 1 bis 2¹⁰ = 1024 und kombinieren Sie. 1024 = 1k, 1024² = 1M, 1024³ = 1G
Comonad

31
Ich erinnere mich im Allgemeinen, dass alle 3 Bits ungefähr eine Dezimalstelle sind. Dies bringt mich in die richtige Größenordnung: 32 Bit sind 10 Stellen.
Barmar

8
@JoachimSauer es kann sicherlich beim Debuggen helfen, wenn Sie lernen, diese Art von Zahlen zumindest zu erkennen.
Dunaril

72
"Wenn eine Festplatte voll wird, werden alle MBytes archiviert" (2 Buchstaben, 1 Buchstabe, 4 Buchstaben, 7 Buchstaben, 4 Buchstaben, 8 Buchstaben, 3 Buchstaben, 6 Buchstaben, 4 Buchstaben, 7 Buchstaben)
UltraCommit

8
Ein Fall, in dem int32 nicht ausreicht: bbc.com/news/world-asia-30288542
ingaham

Antworten:


5073

Es ist 2.147.483.647. Der einfachste Weg, es sich zu merken, ist ein Tattoo.


83
Meine Mnemonik: 2 ^ 10 ist sehr nahe an 1000, also ist 2 ^ (3 * 10) 1000 ^ 3 oder ungefähr 1 Milliarde. Eines der 32 Bits wird für das Vorzeichen verwendet, sodass der Maximalwert tatsächlich nur 2 ^ 31 beträgt, was ungefähr dem doppelten Betrag entspricht, den Sie für 2 ^ (3 * 10) erhalten: 2 Milliarden.
16807

164
2147483647 ohne Komma.
Vern D.

20
Verwenden Sie einfach: Integer.MAX_VALUEin Java.
Tim

184
Wenn Sie das Tattoo auf Ihrem Gesicht haben, vergessen Sie nicht, es umzukehren, damit es im Spiegel richtig angezeigt wird. Andernfalls sehen Sie 746.384.741.2, was falsch und peinlich wäre.
Larry S

127
2,147,483,647 = 0x7FFFFFFF, wenn Sie sich daran erinnern möchten, verwenden Sie einfach hex.
Roottraveller

493

Die richtigste Antwort, die ich mir vorstellen kann, ist Int32.MaxValue.


18
Bevor dies existierte, habe ich in all meinen Projekten #TIN_32 und INT32_MAX definiert.
WildJoe

45
@CamiloMartin Hey. Das ärgere ich mich. Es gab einfach keinen Platz mehr für Tätowierungen. Offensichtlich mussten der Zeichensatz iso-8859-1 und die Dezimalstellen Pi bis 31415 Priorität erhalten
siehe

3
Wenn Sie programmieren: Ja, in 99% der Fälle. Aber vielleicht möchten Sie wissen, dass die Planung von Programmieransätzen oder die Arbeit mit Daten etwa 2 Milliarden Euro kostet, obwohl es sich um eine sehr große Zahl handelt. :)
Andre Figueiredo

@sehe Ist latin1 / Windows 1252 nicht inzwischen veraltet? Wenn es nicht in die 7 Bytes von ASCII passt, denke ich nicht, dass es einen Platz im Hauptspeicher verdient. Ich meine ... alle UNICODE-Codepages sind irgendwie nützlich, aber über ein Megabyte Hautfläche scheint eine Verschwendung zu sein. (Ganz zu schweigen davon, dass es immer noch keine beschreibenden Glyphen für "pageup / pagedown" oder "pagehome / pageend" enthält)

1
Diese Eigenschaft kann ein guter Rat sein, zusätzlich zur Angabe der richtigen Nummer. Diese Antwort gefällt mir jedoch nicht, da sie nur eine unportable Methode zur Dertermination des Werts erwähnt und auch nicht erwähnt, für welche Programmiersprachen dies funktioniert ...
mozzbozz

439

Wenn Sie der Meinung sind, dass der Wert in Basis 10 zu schwer zu merken ist, versuchen Sie es mit Basis 2: 1111111111111111111111111111111


145
@ Nick Whaley: Nein, 11111111111111111111111111111 ist positiv. 1111111111111111111111111111111111 wäre negativ :-)
Curd

58
Basis 16 ist es noch einfacher 7FFFFFFF
Nelson Galdeman Graziano

34
@Curd 11111111111111111111111111111111als Basis-2-Zahl wäre immer noch positiv (ein Beispiel negativ in Basis-2 wäre -1) . Diese Folge von Bits ist nur negativ, wenn sie die Komplementzahl einer 32-Bit-2 darstellt :)
BlueRaja - Danny Pflughoeft

143
Am einfachsten zu merken ist die Basis 2.147.483.647. Dann müssen Sie sich nur noch an 1.
big_tommy_7bb erinnern

82
@ tim_barber_7BB eigentlich ist es 10.
fscheidl

317

Wenn Sie sich an die gesamte Pi-Nummer erinnern können, befindet sich die gesuchte Nummer an der Position 1.867.996.680 bis 1.867.996.689 der Dezimalstellen von Pi

Die numerische Zeichenfolge 2147483647 erscheint bei der Dezimalstelle von Pi mit 1.867.996.680 Dezimalstellen. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

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


30
Weißt du, als ich anfing, deine Antwort zu lesen, erwartete ich etwas Praktisches, wie die 20. Ziffer.
JqueryToAddNumbers

95
Das scheint ziemlich cool zu sein. Haben Sie eine andere Speicherregel, an die Sie sich erinnern sollten: 1.867.996.680? Ich finde es schwierig, mich zu erinnern, bei welchem ​​Index ich anfangen soll zu suchen ...
Alderath

10
" Wenn Sie sich an die gesamte Pi-Nummer erinnern können ... " - nein, können Sie nicht, es ist irrational {wie möglicherweise ein oder zwei Beiträge in diesem Q & As} 8-D
SlySven

10
@ Alderath Ich erinnere mich normalerweise an die 10 Dezimalstellen in sqrt (2), beginnend mit der Ziffer 380.630.713 ....
Henrik

2
@Alderath: Die numerische Zeichenfolge 1867996680 erscheint an der 380.630.713. Dezimalstelle der Quadratwurzel von 2.
Yair Halberstadt

290

Es ist 10-stellig, also tun Sie so, als wäre es eine Telefonnummer (vorausgesetzt, Sie befinden sich in den USA). 214-748-3647. Ich empfehle nicht, es anzurufen.


13
Apropos Speichern
Steven

8
"In Dallas gibt es keine" 748 "-Austausch. Diese Nummer ist falsch." - von der Seite von Shambleh verlinkt
Tarnay Kálmán

104
@Steven Ich glaube nicht, dass es sich um Spammer handelt, sondern nur um Personen, die die Telefonnummer versehentlich als INTstatt VARCHARin MySQL gespeichert haben .
Zarel

8
Versuchte es anzurufen. Es klingelte einige Male und ging dann zum Fehlerwählton. = (
Krythic

172

Anstatt es als eine große Zahl zu betrachten, versuchen Sie es aufzuschlüsseln und suchen Sie nach zugehörigen Ideen, z.

  • 2 maximale Snooker-Pausen (eine maximale Pause beträgt 147)
  • 4 Jahre (48 Monate)
  • 3 Jahre (36 Monate)
  • 4 Jahre (48 Monate)

Das Obige gilt für die größte negative Zahl; positiv ist das minus eins.

Vielleicht wird die obige Aufschlüsselung für Sie nicht mehr unvergesslich sein (es ist kaum aufregend, oder?), Aber hoffentlich können Sie sich einige Ideen einfallen lassen, die es sind!


99
Das ist eines der kompliziertesten pneumatischen Geräte, die ich je gesehen habe. Beeindruckend.
Ben Hoffstein

9
Heh, Leute wie Derren Brown befürworten tatsächlich diese Art von Ansatz - eine Zahl in etwas Zufälliges zu zerlegen, was aber einprägsamer ist als nur eine Menge Zahlen: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/…
Luke Bennett

19
Ich habe eine bessere Mnemonik: Alles, woran Sie sich erinnern müssen, sind 2 und 31, da es anscheinend genau 2 ^ 31 ist! Oh, warte ...
Tamas Czinege

28
@DrJokepu Ich bin mir nicht sicher über die Priorität des Operators ... Bedeutet das 2^(31!)oder (2^31)!?
Alderath

1
@ Lucio Beachten Sie, dass sich meine Antwort in erster Linie auf die größte negative Zahl bezieht, die mit 48 endet, nicht mit 47
Luke Bennett

144

Größter negativer Wert (32 Bit): -2147483648
(1 << 31)

Größter positiver Wert (32 Bit): 2147483647
~ (1 << 31)

Mnemonik: "betrunken AKA geil"

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
Die Welten, an die man sich am schwersten erinnern kann. Wenn Sie sich 0118 999 88199 9119 752 ... 3 merken können, können Sie sich das merken.
BenM

11
@Rondles Ich denke, es ist tatsächlich 7253 am Ende.
Tim Tisdall

21
Nee. Das Trinkalter beträgt hier 18 Jahre ... Ich kann diese Mnemonik anscheinend nicht verwenden, mein Leben ist ruiniert.
Joffrey

4
@Aaren Cordova Früher sagten sie, dass Stackoverflow niemals lustig sein wird, nichts weiter als eine Q & A-Site, ich verweise sie im Allgemeinen auf diese Antwort. Dieses Ding kann nur in einem genialen Geist erschaffen werden, ich meine, das ist Kunst.
Mohd Abdul Mujib

5
Die größte negative 32-Bit-Ganzzahl oder 64-Bit-Ganzzahl ist -1.
Fred Mitchell

75

Nehmen Sie auf jeden Fall diesen regulären Ausdruck (er bestimmt, ob die Zeichenfolge eine nicht negative Ganzzahl in Dezimalform enthält, die ebenfalls nicht größer als Int32.MaxValue ist).

[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]

Vielleicht würde es Ihnen helfen, sich zu erinnern.


12
Das klingt viel einfacher und macht mir Spaß. Eigentlich ist es wirklich viel einfacher als 2147483647. Dies wäre eine große Hilfe für die OP
Sнаđошƒаӽ

61

So erinnerte ich mich 2147483647:

  • 214 - weil 2.14 ungefähr pi-1 ist
  • 48 = 6 * 8
  • 64 = 8 * 8

Schreiben Sie diese horizontal:

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

Jetzt haben Sie 2147483647.

Hoffe das hilft zumindest ein bisschen.


3
Schön! Ich denke, die 214-Regel sollte pi - 1 sein. Auch die Maske zeigt 68 statt 64. =) Für Luftfahrtfans wie mich sollte der 737-Wert leicht zu merken sein, wenn er mit Boeings mittelgroßem Verkehrsflugzeug assoziiert wird.

Sie können noch weiter gehen. Lassen Sie die Dezimalstelle fallen und vergleichen Sie pi und 2 ^ 31-1. In den gleichen Positionen erhalten Sie 141 vs 147, so dass die letzte Ziffer nur eine 7 wird. Dann 592 vs 483, alle sind eine Ziffer voneinander entfernt. Und 643 gegen 647, es ist wieder eine 7-Sache.
Peter Cooper

@ PeterCooper Trotzdem beginnen die Dezimalstellen für pi mit 1415926_5_35 (Beachten Sie die 5, nicht eine 4)
Moberg

15
Meine Mnemonik ist es, 4294967296 (was leicht zu merken ist) zu nehmen und durch 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

2 ^ 31 (signiert int max) ist also 2 ^ 30 (ungefähr 1 Milliarde) mal 2 ^ 1 (2) oder ungefähr 2 Milliarden. Und 2 ^ 32 ist 2 ^ 30 * 2 ^ 2 oder ungefähr 4 Milliarden. Diese Näherungsmethode ist genau genug, um etwa 2 ^ 64 zu erreichen (wobei der Fehler auf etwa 15% ansteigt).

Wenn Sie eine genaue Antwort benötigen, sollten Sie einen Taschenrechner aufrufen.

Praktische wortausgerichtete Kapazitätsnäherungen:

  • 2 ^ 16 ~ = 64 Tausend // uint16
  • 2 ^ 32 ~ = 4 Milliarden // uint32, IPv4, Unixtime
  • 2 ^ 64 ~ = 16 Billionen (auch bekannt als 16 Milliarden Milliarden oder 16 Millionen Billionen) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 Billionen Billionen (auch bekannt als 256 Billionen Billionen Billionen) // IPv6, GUID

76
Das haben die Festplattenhersteller gesagt.
Scott Stafford

46

Nehmen Sie einfach einen anständigen Taschenrechner und geben Sie "7FFFFFFF" im Hex-Modus ein. Wechseln Sie dann zur Dezimalstelle.

2147483647.


150
Jeder anständige Rechner kann auch 2 ^ 31.
Christoffer

17
Ich weiß nicht, 2 ^ 31 scheint der lange Weg zu sein, um es zu tun: /
Staaten

2
Oder erinnern Sie sich einfach in hex
Vernon

4
Schreiben Sie es einfach in hex. Oder Int32.MaxValue/numeric_limits<int32_t>::max()
sehe

8
@Christoffer Es ist eigentlich 2 ^ 31 - 1 :)
Kupsef

36

Es geht darum 2.1 * 10^9. Keine Notwendigkeit, das genaue zu wissen 2^{31} - 1 = 2,147,483,647.

C.

Sie können es in C so finden:

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

gibt (naja, ohne das ,)

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

Sie können dies auch mit Java erhalten:

System.out.println(Integer.MAX_VALUE);

Beachten Sie jedoch, dass Java-Ganzzahlen immer signiert sind.

Python 2

Python hat Ganzzahlen mit beliebiger Genauigkeit. In Python 2 werden sie jedoch C-Ganzzahlen zugeordnet. So können Sie Folgendes tun:

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

Python wechselt also zu, longwenn die Ganzzahl größer als wird2^31 -1


Die Python-Antwort ist veraltet, siehe: stackoverflow.com/questions/13795758/…
NOhs

@NOhs Ich schätze den Link, aber meine Python-Antwort bezieht sich auf "Python 2" (ich füge die 2 zum Abschnittstitel hinzu, um es klarer zu machen). Meine Antwort ist also nicht veraltet. (Aber Python 2 ist zugegebenermaßen)
Martin Thoma

35

Hier ist eine Mnemonik zum Speichern von 2 ** 31, subtrahieren Sie eine, um den maximalen ganzzahligen Wert zu erhalten.

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

Ich habe die Potenzen von zwei bis zu 18 oft genug benutzt, um mich an sie zu erinnern, aber selbst ich habe mir nicht die Mühe gemacht, 2 ** 31 auswendig zu lernen. Es ist zu einfach, nach Bedarf zu berechnen oder eine Konstante zu verwenden oder als 2G zu schätzen.


3
Was machst du für 2 ^ 10, 2 ^ 11, 2 ^ 12 oder 2 ^ 17 (alle haben Nullen)?
Supercat

2
@supercat Ich würde entweder a = 0 neu gründen oder o = 0 verwenden.
Mark Ransom

Das ist fantastisch. Danke, du rettest mein Leben.
Chenz

31

32 Bit, eines für das Vorzeichen, 31 Bit Information:

2^31 - 1 = 2147483647

Warum -1?
Weil der erste Null ist, ist der größte der Zähler minus Eins .

BEARBEITEN für cantfindaname88

Die Anzahl ist 2 ^ 31, aber die größte kann nicht 2147483648 (2 ^ 31) sein, weil wir von 0 zählen, nicht von 1.

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

Eine weitere Erklärung mit nur 3 Bits: 1 für das Vorzeichen, 2 für die Information

2^2 - 1 = 3

Vor allem die möglichen Werte mit 3 Bits: (2 ^ 3 = 8 Werte)

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 = Gesamtkombinationen, daher reicht es von 0 bis (2 ^ 31 -1). Ja, der erste ist 0.
Luciano

30

Nun, es hat 32 Bits und kann daher 2 ^ 32 verschiedene Werte speichern. Die Hälfte davon ist negativ.

Die Lösung ist 2.147.483.647

Und der niedrigste ist -2.147.483.648.

(Beachten Sie, dass es noch einen negativen Wert gibt.)


Es hat 32 Bits und kann daher 2 ^ 32 Werte speichern. Nicht weniger.
JB.

28

Abgesehen von Witzen, wenn Sie wirklich nach einer nützlichen Speicherregel suchen, gibt es eine, die ich immer verwende, um mich an große Zahlen zu erinnern.

Sie müssen Ihre Nummer in Teile von 3-4 Ziffern aufteilen und diese mithilfe der Projektion auf der Tastatur Ihres Mobiltelefons visuell speichern. Es ist einfacher, auf einem Bild zu zeigen:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, müssen Sie sich von nun an nur noch 3 Formen merken, von denen 2 wie ein Tetris L und eine wie eine Zecke aussehen . Das ist definitiv viel einfacher als das Auswendiglernen einer 10-stelligen Nummer.

Wenn Sie die Nummer abrufen müssen, rufen Sie einfach die Formen ab, stellen Sie sich eine Telefontastatur vor / schauen Sie sie an und projizieren Sie die Formen darauf. Vielleicht müssen Sie zunächst auf die Tastatur schauen, aber nach ein wenig Übung werden Sie sich daran erinnern, dass die Zahlen von oben links nach unten rechts gehen, sodass Sie sie sich einfach in Ihrem Kopf vorstellen können.

Stellen Sie einfach sicher, dass Sie sich die Richtung der Formen und die Anzahl der Stellen in jeder Form merken (im Beispiel 2147483647 haben wir beispielsweise ein 4-stelliges Tetris L und ein 3-stelliges L).

Mit dieser Technik können Sie sich leicht wichtige Nummern merken (z. B. meine 16-stellige Kreditkartennummer usw.).


Gute Idee! Form 1 ergibt 2147, Form 2 ergibt 483 und Form 3 soll 647 ergeben, aber wie gezeichnet könnte es als 6 5 47 interpretiert werden . Woher weiß ich, wann alle gekreuzten Zahlen einzuschließen sind (wie in Form 1) ) vs. wann man einige überspringt (wie in Form 3)? Sie müssen sich auch merken, dass die Formen jeweils 4, 3 und 3 Ziffern codieren. Oder Sie zeichnen Form 3 mit einem Bogen von 6 bis 4 anstelle einer geraden Linie.
Jskroch

@Squinch Nun, besonders um sich an int.Max zu erinnern, sollte es kein Problem sein, da Sie vielleicht wissen, dass es ungefähr 2 Milliarden sind, also 10 Zahlen enthält (und das bedeutet, wenn die erste Form 4 Zahlen hat, dann die zweite und die dritte Formen haben 3 entsprechend). Dies ist jedoch ein guter Punkt, wenn Sie diesen Ansatz für eine beliebige Anzahl verwenden möchten. Es gibt auch Zahlen, an die man sich auf diese Weise nur schwer erinnern kann (z. B. 1112 oder so). Andererseits sollte es sowieso nicht schwierig sein, sich an eine solche Nummer zu erinnern. Also würde ich sagen, es liegt an Ihnen, lassen Sie mich wissen, wenn Sie etwas Interessantes dafür finden. :)
Ivan Yurchenko

Ja, ich habe darüber nachgedacht, diese Methode zu verwenden, um eine beliebige Folge von Ziffern abzurufen, aber für diesen bestimmten int.Max-Wert funktioniert Ihre Methode ziemlich gut. Wie Sie sagten, sind wiederholte Ziffern ein Problem. Tatsächlich ist jede wiederholte Sequenz (wie 2323) ein Problem. Jede Sequenz, die sich selbst kreuzt (z. B. 2058), ist schwer zu zeichnen. Bei jeder Speichertechnik müssen Sie sich mehrere Informationen merken. Es ist eine persönliche Präferenz, welche Arten von Informationen am besten in Ihrem Kopf bleiben.
Jskroch

1
So erinnere ich mich an PIN-Codes und ähnliches, aber dann müssen Sie sie plötzlich auf Ihrem Computer eingeben und feststellen, dass der Nummernblock vertikal umgedreht ist. Das ist also eine Herausforderung.
Nibarius

Jemand in Dallas, Texas , hat viele seltsame Anrufe erhalten und hat keine Ahnung, dass Sie @IvanYurchenko schuld sind.
Bob Stein

21

Der einfachste Weg, dies für ganze Zahlen zu tun, ist die Verwendung von Hexadezimalzahlen, vorausgesetzt, es gibt nicht so etwas wie Int.maxInt (). Der Grund ist folgender:

Max vorzeichenlose Werte

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

Vorzeichenbehaftete Werte, wobei 7F als maximaler vorzeichenbehafteter Wert verwendet wird

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

Vorzeichenbehaftete Werte, wobei 80 als maximaler vorzeichenbehafteter Wert verwendet wird

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

Wie funktioniert das? Dies ist der binären Taktik sehr ähnlich und jede hexadezimale Ziffer besteht aus genau 4 Bits. Außerdem unterstützen viele Compiler Hex viel besser als Binär.

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

7F ist also gleich 01111111 / 7FFF ist gleich 0111111111111111. Wenn Sie dies für eine "wahnsinnig hohe Konstante" verwenden, ist 7F ... ein sicheres Hex, aber es ist einfach genug, 7F und 80 auszuprobieren und sie einfach auszudrucken auf Ihrem Bildschirm, um zu sehen, um welches es sich handelt.

0x7FFF + 0x0001 = 0x8000, Ihr Verlust ist also nur eine Zahl. Die Verwendung von 0x7F ... ist normalerweise kein schlechter Kompromiss für zuverlässigeren Code, insbesondere wenn Sie 32-Bit oder mehr verwenden


21

Schreiben Sie zuerst 47 zweimal aus (Sie mögen Agent 47 , richtig?) Und lassen Sie dabei die Leerzeichen wie gezeigt (jeder Bindestrich ist ein Steckplatz für eine einzelne Ziffer. Zuerst 2 Steckplätze, dann 4)

--47----47

Denken Sie, Sie haben 12in der Hand (weil 12 = ein Dutzend). Multiplizieren Sie es mit der 4ersten Ziffer der Nummer von Agent 47, dh 47platzieren Sie das Ergebnis rechts neben dem ersten Paar, das Sie bereits haben

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

Dann multiplizieren Sie 12mit 3(um die zweite Ziffer der Nummer von Agent 47 zu erhalten, die 7Sie benötigen 7 - 4 = 3) und setzen Sie das Ergebnis rechts von den ersten beiden Paaren, dem letzten Paar-Slot

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

Ziehen Sie zum Schluss die Ziffern einzeln von Ihrer Hand ab der am weitesten rechts stehenden Ziffer (in diesem Fall 2) und platzieren Sie sie in dem ersten leeren Steckplatz, den Sie erhalten

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

Hier hast du es! Für ein negatives Limit können Sie sich das als 1 weiteren absoluten Wert vorstellen als die positive Grenze vorstellen.

Übe ein paar Mal und du wirst den Dreh raus bekommen!


"1 mehr im absoluten Wert als die positive Grenze" hat mich erwischt.
Navin

20

2 GB

(Gibt es eine Mindestlänge für Antworten?)


18
Sollte das nicht GiB sein?
Jouke van der Maas

9
@JoukevanderMaas - Eigentlich sollte es 4B sein.
Ted Hopp

1
Aus diesem Grund beträgt die RAM-Grenze eines 32-Bit-Computers 4 GB
Serj Sagan,

3
Der Wert von 4 GB ist bei vorzeichenlosen Ganzzahlen korrekt. Wenn Sie ein signiertes Int haben, müssen Sie natürlich durch 2 teilen, um den maximal möglichen Wert zu erhalten
SwissCoder

3
In 32-Bit gibt es 2 GB Speicherplatzreserve für den Benutzerprozess und 2 GB für den Kernel. Es kann so konfiguriert werden, dass der Kernel nur 1 GB reserviert hat
Rune

15

Angenommen, .NET -

Console.WriteLine(Int32.MaxValue);

15

Wenn Sie Ihre ASCII-Tabelle auswendig kennen und nicht MaxInt:
!GH6G = 21 47 48 36 47


Als ich diese Antwort schrieb, wusste ich nicht, dass GH6G so viele Google-Hits hat, und jetzt habe ich diese selbst verwendet :-)
Mark Hurd

15

Die beste Regel, um es auswendig zu lernen, ist:
21 (magische Zahl!)
47 (nur daran erinnern)
48 (sequentiell!)
36 (21 + 15, beide Magie!)
47 wieder

Es ist auch einfacher, sich 5 Paare als 10 Ziffern zu merken.


14

Der einfachste Weg, sich zu erinnern, ist zu betrachten std::numeric_limits< int >::max()

Zum Beispiel ( von 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

Interessanterweise hat Int32.MaxValue mehr Zeichen als 2.147.486.647.

Aber andererseits haben wir Code-Vervollständigung,

Ich denke, alles, was wir uns wirklich merken müssen, ist Int3<period>M<enter>, dass wir nur 6 Zeichen in Visual Studio eingeben müssen.

UPDATE Aus irgendeinem Grund wurde ich abgelehnt. Der einzige Grund, an den ich denken kann, ist, dass sie meine erste Aussage nicht verstanden haben.

Die Eingabe von "Int32.MaxValue" dauert höchstens 14 Zeichen. Für die Eingabe von 2.147.486.647 werden entweder 10 oder 13 Zeichen benötigt, je nachdem, ob Sie die Kommas eingeben oder nicht.


2
Was jedoch zählt, ist nicht, wie viele Zeichen Sie eingeben müssen, sondern wie Sie sie auswendig lernen. Ich bin sicher, es Iwannagohomeist einfacher, sich zu merken als 298347829. Kein Grund für eine -1.
glglgl

3
Es könnte weniger sein, machen Sie einfach Ihr eigenes Maximalwert-Snippet, "imv" <tab> <tab> vielleicht?
BradleyDotNET

4
Zeichen !=Tastenanschläge. Für diesen armen .Net-Benutzer ist es in+ .+ ma+ Return.
Michael - Wo ist Clay Shirky

11

Denken Sie daran, dass 2 ^ (10 * x) ungefähr 10 ^ (3 * x) ist - Sie sind wahrscheinlich bereits mit Kilobyte / Kibibyte usw. daran gewöhnt. Das heißt:

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

Da ein int 31 Bits verwendet (+ ~ 1 Bit für das Vorzeichen), verdoppeln Sie einfach 2 ^ 30, um ungefähr 2 Milliarden zu erhalten. Verdoppeln Sie für ein Int ohne Vorzeichen mit 32 Bit erneut 4 Milliarden. Der Fehlerfaktor wird natürlich umso höher, je größer Sie werden, aber Sie müssen nicht den genauen Wert speichern (wenn Sie ihn benötigen, sollten Sie trotzdem eine vordefinierte Konstante dafür verwenden). Der ungefähre Wert ist gut genug, um festzustellen, wann etwas gefährlich nahe am Überlaufen sein könnte.


10
Offtopic: 2 ^ 4 = 4 ^ 2, daher ist Potenzierung kommutativ!
Adam Liss

10
@ Pier-OlivierThibault nein, ich benutze es die ganze Zeit! Jetzt muss ich herausfinden, warum meine ganze Mathematik falsch läuft. wahrscheinlich etwas mit Multiplikationsfehlern zu tun. Wie auch immer, tschüss!
Türknauf

9

So mache ich es, um mich an 2.147.483.647 zu erinnern

Zu einem weiten Savannenviertel verhexte das Optimus-Trio vierzig September

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

7

Was meinst du? Es sollte leicht genug sein, sich daran zu erinnern, dass es 2 ^ 32 ist. Wenn eine Regel den Wert dieser Zahl speichern soll, ist eine praktische Faustregel die Konvertierung zwischen Binär und Dezimalzahl im Allgemeinen:

2 ^ 10 ~ 1000

was 2 ^ 20 ~ 1.000.000 bedeutet

und 2 ^ 30 ~ 1.000.000.000

Das Doppelte (2 ^ 31) ist ungefähr 2 Milliarden, und das Doppelte (2 ^ 32) ist 4 Milliarden.

Es ist eine einfache Möglichkeit, eine grobe Schätzung einer beliebigen Binärzahl zu erhalten. 10 binäre Nullen werden zu 3 Dezimalstellen.


7
aber es ist nicht 2 ^ 32 - es ist (2 ^ 31) -1
Steve Folly

6

Denken Sie in Objective-C (iOS & OSX) an folgende Makros:

#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 bedeutet, dass Sie 32 Bit zum Speichern Ihrer Nummer zur Verfügung haben. Das höchste Bit ist das Vorzeichenbit. Dies zeigt an, ob die Zahl positiv oder negativ ist. Sie haben also 2 ^ 31 Bits für positive und negative Zahlen.

Wenn Null eine positive Zahl ist, erhalten Sie den logischen Bereich von (zuvor erwähnt)

+2147483647 bis -2147483648

Wenn Sie der Meinung sind, dass dies zu klein ist, verwenden Sie Int64:

+9223372036854775807 bis -9223372036854775808

Und warum zum Teufel willst du dich an diese Nummer erinnern? In Ihrem Code verwenden? Sie sollten immer Int32.MaxValue oder Int32.MinValue in Ihrem Code verwenden, da dies statische Werte (innerhalb des .net-Kerns) sind und daher schneller verwendet werden als das Erstellen eines neuen int mit Code.

Meine Aussage: Wenn Sie diese Nummer aus dem Gedächtnis kennen, geben Sie nur an!


2
Die meisten modernen Computer speichern Nummern im "Zwei-Kompliment" -Format. Das höchste (nicht niedrigste) Bit ist das Vorzeichen. Das Schöne an zwei Kompensationen ist, dass -ve Zahlen von den natürlichen Überlaufregeln der CPU behandelt werden. dh 0xFF ist 8 Bit -1, addiere das zu 0x01 (+1) und du erhältst 0x100. Wenn Sie Bits über 8 bis 0x00 abschneiden, haben Sie Ihre Antwort.
Tom Leys

5

Denken Sie daran: 21 IQ ITEM 47

Es kann mit jedem Telefonblock entschlüsselt werden, oder Sie können einfach einen auf ein Papier schreiben.

Um mich an "21 IQ ITEM 47" zu erinnern, würde ich mit "Hitman: Codename 47 hatte 21 Missionen, die jeweils für sich IQ IQEMs waren" gehen.

Oder "Ich putze jeden Tag um 21:47 Uhr die Zähne, weil ich einen hohen IQ habe und keine Gegenstände in meinem Mund mag".


Was meinst du damit de-encoded with any phone pad?
McExchange
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.