it-swarm.com.de

Was ist der Maximalwert für ein int32?

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

1342
Flinkman

Es ist 2.147.483.647. Die einfachste Möglichkeit, es auswendig zu lernen, ist das Tätowieren.

4882
Ben Hoffstein

Die richtigste Antwort, die mir einfällt, ist Int32.MaxValue.

475
Adrian Clark

Wenn Sie glauben, dass der Wert in der Basis 10 zu schwer zu merken ist, versuchen Sie die Basis 2:

422
Curd

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

280
WildJoe

wenn Sie sich die gesamte Pi-Nummer merken 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 an der Dezimalstelle von Pi mit 1.867.996.680. 3.14 ...... 861812218099364523462147483647 10527835665425671614 ...

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

268

Anstatt es als eine große Zahl zu betrachten, zerlegen Sie es und suchen Sie nach zugehörigen Ideen, zB:

  • 2 maximale Snookerpausen (eine maximale Pause ist 147)
  • 4 Jahre (48 Monate)
  • 3 Jahre (36 Monate)
  • 4 Jahre (48 Monate)

Dies gilt für die größte negative Zahl. Positiv ist das minus eins.

Vielleicht ist der obige Zusammenbruch für Sie nicht mehr denkwürdig (es ist kaum aufregend, oder?), Aber hoffentlich können Sie sich ein paar Ideen einfallen lassen!

161
Luke Bennett

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

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

Gedächtnis: "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
140
Aaren Cordova

Wie auch immer, nehmen Sie diesen Regex (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 hilft es dir, dich daran zu erinnern.

69
Chizh

So erinnerte ich mich an 2147483647:

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

Schreibe 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.

60
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

So ist 2 ^ 31 (mit Vorzeichen int max) 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 Annäherungsmethode ist genau genug, um etwa 2 ^ 64 auszugleichen (wobei der Fehler auf etwa 15% anwächst).

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

Praktisch Word-ausgerichtete Kapazitätsannäherungen:

  • 2 ^ 16 ~ = 64 tausend // uint16
  • 2 ^ 32 ~ = 4 Mrd. // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillion (aka 16 Milliarden oder 16 Millionen Billionen) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillion quintillion (alias 256 Billionen Billionen Billionen) // IPv6, GUID
56
Wedge

Nehmen Sie einfach einen anständigen Rechner und geben Sie im Hex-Modus "7FFFFFFF" ein, dann wechseln Sie auf Dezimal.

2147483647.

44
darron

Es geht um 2.1 * 10^9. Es ist nicht notwendig, den genauen 2^{31} - 1 = 2,147,483,647 zu kennen.

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 (gut, ohne den ,)

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

Denken Sie jedoch daran, dass Java-Ganzzahlen immer signiert sind.

Python 2

Python hat beliebige Zahlen mit beliebiger Genauigkeit. In Python 2 werden sie jedoch auf ganze C-Zahlen abgebildet. So kannst du das machen:

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

Daher wechselt Python zu long, wenn die Ganzzahl größer als 2^31 -1 wird.

34
Martin Thoma

Hier ist eine Mnemonik zum Erinnern von 2 ** 31, subtrahieren Sie eins, 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 Kräfte von zwei bis zu 18 oft genug verwendet, um mich an sie zu erinnern, aber selbst ich habe mir nicht die Mühe gemacht, mich zu merken. Es ist zu einfach, nach Bedarf zu berechnen oder eine Konstante zu verwenden oder als 2G zu schätzen.

33
Mark Ransom

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

2^31 - 1 = 2147483647

Warum -1?
Da die erste Null ist, ist die größte Anzahl count minus eins.

EDIT für cantfindaname88

Die Zählung ist 2 ^ 31, aber die größte kann nicht 2147483648 (2 ^ 31) sein, weil wir von 0 aus 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

Nachfolgend alle 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
31
Aerospace

Nun, es hat 32 Bit und kann somit 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 einen weiteren negativen Wert gibt.)

29
Sarien

An dieser Stelle würde ich sagen, die einfachste Mnemonik ist die Eingabe von "stackoverflow.com". TAB "maximum int32" in Chrome.

Es gibt irgendwo einen Rekursions-> Stapelüberlauf-Witz. Ich bin nur nicht so geeky.

28

Nun, abgesehen von Witzen, wenn Sie wirklich nach einer nützlichen Speicherregel suchen, gibt es eine, die ich immer für das Erinnern an große Zahlen verwende.

Sie müssen Ihre Nummer in 3 bis 4-stellige Teile unterteilen und sich diese per Projektion auf der Tastatur Ihres Mobiltelefons visuell merken. Es ist einfacher, auf einem Bild zu zeigen:

 enter image description here

Wie Sie sehen können, ist Sie müssen sich nur noch 3 Formen merken, von denen 2 wie ein Tetris L aussehen und eine sieht aus wie ein Häkchen. Das ist definitiv viel einfacher als das Speichern einer 10-stelligen Nummer.

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

Stellen Sie sicher, dass Sie sich die Richtung der Formen und die Anzahl der Ziffern in jeder Form merken (z. B. haben wir im Beispiel 2147483647 einen 4-stelligen Tetris L und einen 3-stelligen L).

Sie können diese Technik verwenden, um sich wichtige Nummern leicht zu merken (z. B. erinnerte ich mich an meine 16-stellige Kreditkartennummer usw.).

21
Ivan Yurchenko

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

Max. Vorzeichenlose Werte

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

Signierte Werte, wobei 7F als maximaler signierter Wert verwendet wird

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

Signierte Werte, wobei 80 als maximaler signierter 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 Hex-Ziffer ist genau 4 Bit. Außerdem unterstützen viele Compiler Hex viel besser als Binärdateien. 

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

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

0x7FFF + 0x0001 = 0x8000, also ist Ihr Verlust nur eine Zahl, daher ist die Verwendung von 0x7F normalerweise kein schlechter Kompromiss für zuverlässigeren Code, besonders wenn Sie erst mit 32-Bit oder mehr beginnen

21
Joe Plante

Schreiben Sie zuerst 47 zweimal aus (Sie möchten Agent 47 , oder?), Und geben Sie die Leerzeichen wie gezeigt ein (jeder Strich ist ein Platz für eine einzelne Ziffer. Zuerst 2 und dann 4)

--47----47

Ich denke, Sie haben 12 in der Hand (weil 12 = ein Dutzend). Multiplizieren Sie es mit 4, der ersten Ziffer der Agent 47-Nummer, d. H. 47, und platzieren Sie das Ergebnis rechts vom ersten bereits vorhandenen Paar

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

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

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

Ziehen Sie abschließend die Ziffern nacheinander von der rechten Hand (in diesem Fall 2) und setzen Sie sie in den ersten freien Platz, den Sie erhalten

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

Hier hast du es! Bei einem negativen Grenzwert können Sie sich das als 1 mehr in absoluter Wert vorstellen als der positive Grenzwert.

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

20

2 GB

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

19
Rune

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

16
Mark Hurd

Die beste Regel zum Auswendiglernen ist:
21 (magische Zahl!)
47 (erinnere mich einfach daran)
48 (sequentiell!)
36 (21 + 15, beide Magien!)
47 wieder

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

16
MacGyver

Annahme von .NET -

Console.WriteLine(Int32.MaxValue);
15
Kev

Interessanterweise enthält 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>, also nur 6 Zeichen für die Eingabe in Visual Studio.

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

Für "Int32.MaxValue" sind maximal 14 Zeichen einzugeben. __ 2.147.486.647 benötigt 10 oder 13 Zeichen, je nachdem, ob Sie die Kommas eingeben oder nicht.

15
NotMe

Der einfachste Weg, sich zu erinnern, ist 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
Seq

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

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

Da ein int 31 Bits (+ ~ 1 Bit für das Vorzeichen) verwendet, verdoppeln Sie einfach 2 ^ 30, um ungefähr 2 Milliarden zu erhalten. Für ein vorzeichenloses int mit 32 Bits verdoppeln Sie erneut 4 Milliarden. Der Fehlerfaktor wird umso höher, je größer Sie natürlich sind, Sie brauchen jedoch nicht den genauen Wert (wenn Sie ihn benötigen, sollten Sie trotzdem eine vordefinierte Konstante verwenden). Der ungefähre Wert ist gut genug, um zu erkennen, wann etwas gefährlich nahe an einem Überlauf ist.

11
Brian

so mache ich es, mich an 2.147.483.647 zu erinnern

In einem Viertel der Savanne, in dem das Trio optimus vierzig Jahre verzauberte

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

Was meinst du? Es sollte leicht genug sein, sich daran zu erinnern, dass es 2 ^ 32 ..__ ist. Wenn Sie möchten, dass eine Regel den Wert dieser Zahl speichert, ist eine praktische Faustregel für die Konvertierung zwischen binär und dezimal im Allgemeinen:

2 ^ 10 ~ 1000

was bedeutet 2 ^ 20 ~ 1.000.000

und 2 bis 30.000.000.000

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

Es ist ein einfacher Weg, um eine grobe Schätzung jeder binären Zahl zu erhalten. 10 binäre Nullen werden zu 3 Nullen dezimal.

7
jalf

Als Physiker würde ich einfach auf 2 Milliarden (Halbwitz) runden. Leicht zu erinnern!

7
bersling

In Objective-C (iOS & OSX) sollten Sie sich diese Makros merken:

#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
6
juniperi

Int32 bedeutet, dass Sie 32 Bit zur Verfügung haben, um Ihre Nummer zu speichern. 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 denken, dass dies zu klein ist, verwenden Sie Int64:

+9223372036854775807 bis -9223372036854775808

Und warum 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 können, als das Erstellen eines neuen Int mit Code.

Meine Aussage: Wenn Sie diese Nummer auswendig kennen ... Sie zeigen einfach nur vor!

5

Denken Sie daran: 21 IQ ITEM 47

Es kann mit jedem Telefonblock entschlüsselt werden, oder Sie können es selbst auf Papier schreiben.

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

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

5
soprof

Mit Groovy auf dem Weg:

groovy -e " println Integer.MAX_VALUE "

(Groovy ist äußerst nützlich für eine schnelle Referenz in einem Java-Kontext.)

4
Michael Easter

Den maximalen Wert eines beliebigen Typs niemals vergessen:

Wenn es 32 Bits hat, wären die 32 Bits mit der Nummer 1 der größte mögliche Wert:

 enter image description here

Das Ergebnis wäre 4294967295 in Dezimalzahl:

 enter image description here

Da jedoch auch negative Zahlen dargestellt werden, dividieren Sie 4294967295 durch 2 und erhalten Sie 2147483647.

Daher kann eine 32-Bit-Ganzzahl -2147483647 bis 2147483647 darstellen

2

So erinnere ich mich ...
In Hex stellt eine Ziffer vier Bits dar, also 4 * 8 = 32, also ist das max.

0xFFFFFFFF >> 1 # => 2147483647
2
Sean Vikoren

Versuchen Sie es in Python:

>>> int('1' * 31, base=2)
2147483647
2
g10guang

Es ist 2147483647, aber Sie müssen sich das wirklich nicht merken. Es hängt davon ab, wie viele Ziffern Ihre Nummer haben kann. Manchmal können Sie stattdessen short int verwenden.

Wenn ein Überlauf jedoch katastrophal für Ihr Programm wäre, müssen Sie möglicherweise eine Bibliothek für unbegrenzte Größe verwenden (wäre jedoch langsamer).

2
theo2003

Ich habe in C # einige geniale Methoden entwickelt, die Sie in Ihrer Produktionsumgebung nutzen können:

public static int GetIntMaxValueGenius1()
{
    int n = 0;
    while (++n > 0) { }
    return --n;
}

public static int GetIntMaxValueGenius2()
{
    int n = 0;
    try
    {
        while (true)
            n = checked(n + 1);
    }
    catch { }
    return n;
}
2
yazanpro

2147483647

Folgendes sollten Sie beachten:

  • Es ist 2 Milliarden .
  • Die nächsten drei Drillinge nehmen wie folgt zu: 100er, 400er, 600er
  • Das erste und das letzte Triplett müssen 3 hinzugefügt werden, damit sie auf 50 gerundet werden (zB 147 + 3 = 150 & 647 + 3 = 650).
  • Das zweite Triplett benötigt 3 , um es auf 80 abzurunden (zB 483 - 3 = 480).

2, 147, 483, 647

2
G.Rassovsky

Ein anderer Weg, um diese Nummer zu erreichen:

  1. Spielen Sie 2048 bis zum maximalen theoretischen Limit. Im Bild: 15 Züge vor USHRT_MAX.
  2. Platziere das Ergebnis. Über UINT_MAX.
  3. Teilen Sie durch 2 und - 1, um INT_MAX zu erhalten.

 enter image description here

2
Uri

Verwendung von Java 9 REPL, jshell :

$ jshell
|  Welcome to JShell -- Version 9-Debian

jshell> System.out.println(Integer.MAX_VALUE)
2147483647
1
Michael Easter

Binär ist der Maximalwert eines Int32-Werts 111111111111111111111111111111 In zehn Fällen finden Sie jedoch 2147483647 oder 2 ^ 31-1 oder Int32.MaxValue

1
trinalbadger587
  1. Ziehe 31 Kaninchengenerationen auf.
  2. Machen Sie einen 1-Kaninchen-Eintopf. *
  3. Zähle die restlichen Kaninchen.

* Wie macht man Kanincheneintopf? Ich weiß nicht, schau im Internet nach.

0
Bob Stein
max_signed_32_bit_num = 1 << 31 - 1;  // alternatively ~(1 << 31)

Ein Compiler sollte es trotzdem optimieren.

Ich bevorzuge 1 << 31 - 1 über 

0x7fffffff, weil Sie keine Anzahl fs benötigen

unsigned( pow( 2, 31 ) ) - 1, weil Sie <math.h> nicht benötigen

0
lllllllllll

Es ist 2 ^ 31 - 1 (32 Bit, eins wird für Vorzeichen verwendet).

Wenn Sie einen ungefähren Wert wünschen, verwenden Sie 2 ^ 10 = 1024 ~ 10 ^ 3, also 2 ^ 31 ~ 2 * 10 ^ 9. Wenn Sie einen exakten Wert von Hand berechnen möchten, verwenden Sie die Potenzierung durch Quadrieren, um zu 2 ^ 32 = 2 ^ (2 ^ 5) zu gelangen und durch zwei zu teilen. Sie müssen nur fünfmal ein Quadrat machen, um 2 ^ 32 zu erhalten:

2*2 = 4
4*4 = 16
16*16 = 256
256*256 = 25*25*100 + 2*250*6 + 36 = 62500 + 3000 + 36 = 65536
65536*65536 =65000*65000 + 2*65000*536 + 536*536 =  
4225000000 + 130000*536 + (250000 + 3600 + 36*36) =
4225000000 + 69680000 + 250000 + 3600 + 1296 =
4294967296

wenn Sie dies durch zwei teilen und eins subtrahieren, erhalten Sie 2147483647. Wenn Sie nicht alle Ziffern benötigen, sondern nur die ersten drei signifikanten Ziffern angeben möchten, sind die Berechnungen für jeden Quadrierungsschritt sehr einfach.

0
saolof

Ich schaue immer nur in der Bibliothek von Babel nach, einer Sammlung aller möglichen Texte mit dem englischen Alphabet.

Ein Link zu der spezifischen Seite des jeweiligen Buches zu einem bestimmten Bereich in einem bestimmten Abschnitt ist hier: https://libraryofbabel.info/bookmark.cgi?max_int32

0
Thediabloman

Verwenden Sie in C INT32_MAX nach #include <stdint.h>. In C++ verwenden Sie INT32_MAX nach #include <cstdint>.

Oder INT_MAX für plattformspezifische Größe oder UINT32_MAX oder UINT_MAX für unsigned int. Siehe http://www.cplusplus.com/reference/cstdint/ und http://www.cplusplus.com/reference/climits/ .

Oder sizeof(int).

0
Reed Hedges

Im Allgemeinen können Sie eine einfache Operation ausführen, die die Natur eines Int32 widerspiegelt, alle verfügbaren Bits mit 1-Werten füllen. In den meisten Sprachen funktioniert es im Prinzip genauso, aber ich gehe mit Python für das Beispiel:

max = 0
bits = [1] * 31 # Generate a "bit array" filled with 1's
for bit in bits:
    max = (max << 1) | bit
# max is now 2147483647

Für vorzeichenlose Int32-Werte machen Sie 32 statt 31 1-Werte.

Aber da es ein paar abenteuerlichere Ansätze gibt, dachte ich an Formeln, nur zum Spaß ...

Formel 1 (Zahlen werden verkettet, wenn kein Operator angegeben wird)

  • a = 4
  • b = 8
  • ba/a
  • ab-1
  • ab
  • ab-a-b
  • ab-1

Python-Quickcheck

a = 4
b = 8
ab = int('%d%d' % (a, b))
ba = int('%d%d' % (b, a))
'%d%d%d%d%d' % (ba/a, ab-1, ab, ab-a-b, ab-1)
# gives '2147483647'

Formel 2

  • x = 48
  • x/2-3
  • x-1
  • x
  • x * 3/4
  • x-1

Python-Quickcheck

x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1) 
# gives '2147483647'
0
wiesion

Benutze deine Vorstellungskraft!

Schließen Sie die Augen und sehen Sie den alten einbeinigen chinesischen Bauern Wang, der trotz seines Handicaps zum reichsten und mächtigsten Hirten Chinas geworden ist (daher auch auf der ganzen Welt). Seine Familie besteht aus sich selbst, seiner Frau, ihren vier Söhnen und dem Schäferhund Alice. Eines Tages versammelte er sie alle auf der endlosen Wiese, die mit seinen Millionen von Schafen bedeckt war und sagte:

Ich bin alt und müde. Also habe ich beschlossen, mein Vermögen gleich auf meine Söhne aufzuteilen.

Er zeigte auf alle Schafe:

Das sind alles deine Kinder. Jeder von euch bekommt 123456789 weiße Schafe, 10101010 schwarze Schafe, 203040 gefleckte Schafe, 444888 Lämmer und 12000 Widder. Den Hund behalte ich für mich. Das ist, was ich gesagt habe.

Er lehnte sich an die Schulter seiner Frau und lächelte.

Also ... mein Freund, stell dir dieses Bild vor! Stellen Sie es sich so lebendig und real wie möglich vor! Lass es vor deinen Augen leben!

Dann knie nieder ... und fang an zu zählen! Die Anzahl der Abschnitte in diesem Feld ist der Maximalwert für ein int32.

Es gibt jedoch zwei bekannte Mängel der beschriebenen Methode:

  1. Der Fantasie des Menschen sind keine Grenzen gesetzt. Daher ist es schwierig, sich die genaue Anzahl der Schafe auf diesem Feld vorzustellen, ohne weitere Schafe zu schaffen, während Sie die Beine zählen.
  2. Menschen sind faul ... also versuchen viele Leute, nur die Schafe zu zählen und mit vier zu multiplizieren, anstatt die Beine zu zählen, aber ... raten Sie mal - sie fallen schlafen.
0
StoYan

Es ist sehr leicht zu merken. Im Hexadezimalformat ist eine Ziffer 4 Bit. Schreiben Sie also für unsigned int 0x und 8 fs (0xffffffff) in eine Python- oder Ruby-Shell, um den Wert in Basis 10 zu erhalten. Wenn Sie den signierten Wert benötigen, denken Sie daran, dass das höchste Bit als Vorzeichen verwendet wird. Also musst du das weglassen. Sie müssen nur daran denken, dass die Zahl, bei der die unteren 3 Bits 1 sind und das vierte Bit 0 ist, gleich 7 ist. Schreiben Sie 0x7fffffff in eine Python- oder Ruby-Shell. Sie könnten auch 0x100000000 - 1 und 0x80000000 - 1 schreiben, wenn Sie sich das leichter merken können.

0
panzi

"Wenn eine riesige Ganzzahl nicht abgerufen wird, rufen Sie diese Mnemonik ab."

Zähle nun die Buchstaben in jedem Wort.

0
Matt Malone