1378 Stimmen

Was ist der Höchstwert für einen int32?

Ich kann mir die Nummer nie merken. Ich brauche eine Gedächtnisregel.

48 Stimmen

Ohne Vorzeichen: 2³²-1 = 4-1024³-1; mit Vorzeichen: -2³¹ .. +2³¹-1, weil das Vorzeichenbit das höchste Bit ist. Lerne einfach 2=1 bis 2¹=1024 und kombiniere. 1024=1k, 1024²=1M, 1024³=1G

31 Stimmen

Ich erinnere mich im Allgemeinen daran, dass alle 3 Bits etwa einer Dezimalstelle entsprechen. So komme ich auf die richtige Größenordnung: 32 Bits sind 10 Ziffern.

8 Stimmen

@JoachimSauer es kann sicherlich bei der Fehlersuche helfen, wenn man lernt, zumindest diese Art von Zahlen zu erkennen.

4voto

yazanpro Punkte 4052

Ich habe ein paar geniale Methoden in C# 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;
}

1 Stimmen

Ich dachte an eine Art von Methode, die Billionen von zufälligen ganzen Zahlen erraten würde, und die höchste zurückgeben.

4voto

Michael Easter Punkte 22288

Mit Groovy auf dem Weg:

groovy -e " println Integer.MAX_VALUE "

(Groovy ist im Java-Kontext äußerst nützlich für schnelle Referenzen).

4voto

Toby Punkte 9036

Denken Sie nur daran, dass es die achte Mersenne-Primzahl ist.

Wenn das zu schwer ist, ist es auch das dritte von nur vier bekannten 二重 Mersenne-Primzahlen.

Bearbeiten per Kommentar Anfrage:

Das Euklid-Euler-Theorem besagt, dass jede gerade perfekte Zahl die Form 2^(n 1) (2^n 1) hat, wobei 2^n 1 eine Primzahl ist. Die Primzahlen der Form 2^n 1 werden als Mersenne-Primzahlen bezeichnet und setzen voraus, dass n selbst eine Primzahl ist.

Wir wissen, dass die Länge eines INT32 natürlich 32 Bit beträgt. Nach dem allgemein akzeptierten Verständnis des 2er-Komplements ist ein INT32 mit Vorzeichen 32 Bit - 1 Bit.

Um den Betrag einer Binärzahl mit einer bestimmten Anzahl von Bits zu ermitteln, erhöht man im Allgemeinen 2 hoch n minus 1, wobei n gleich der Anzahl der Bits ist.

Die Berechnung des Betrags lautet also 2^(32 - 1) - 1 = 2^31 - 1. 31 ist eine Primzahl, und wie oben dargelegt, sind Primzahlen dieser Form Mersenne-Primzahlen. Wir können beweisen, dass es die achte von ihnen ist, indem wir sie einfach abzählen. Für weitere Einzelheiten fragen Sie bitte Euler oder vielleicht Bernoulli (an den er darüber schrieb).

Siehe: https://books.google.ie/books?id=x7p4tCPPuXoC&printsec=frontcover&dq=9780883853283&hl=en&sa=X&ved=0ahUKEwilzbORuJLdAhUOiaYKHcsZD-EQ6AEIKTAA#v=onepage&q=9780883853283&f=false

0 Stimmen

Irgendeine Referenz, die Sie verlinken könnten...? (Direkt, ohne zu googeln/wikipediaze...)

2voto

Guilherme Fidelis Punkte 1034

Niemals den maximalen Wert eines Typs vergessen:

Bei 32 Bits wären die 32 Bits mit der Zahl 1 der größtmögliche Wert:

enter image description here

Das Ergebnis wäre 4294967295 in Dezimalzahlen:

enter image description here

Da es aber auch die Darstellung von negativen Zahlen gibt, dividiert man 4294967295 durch 2 und erhält 2147483647.

Eine 32-Bit-Ganzzahl kann also -2147483647 bis 2147483647 darstellen.

0 Stimmen

Man kann auch einfach 2^31 nehmen (das ist auch die Art und Weise, wie die Zahl im Speicher abgelegt ist - ein Bit für das positive/negative Flag und 31 Bits für die Zahl), was dann automatisch die Hälfte ist. Und subtrahiere eins für die Zahl Null (in deinem Fall erhältst du 2147483647.5, nicht 2147483647, da du das nicht berücksichtigst).

2voto

Sean Vikoren Punkte 1062

So erinnere ich mich...
In Hex steht eine Ziffer für vier Bits, also 4 * 8 = 32, so dass der maximale vorzeichenbehaftete 32-Bit-Int lautet:

0xFFFFFFFF >> 1 # => 2147483647

0 Stimmen

Das würde wahrscheinlich funktionieren. Ich wünschte, der Typ, der dich heruntergestuft hat, würde dir eine Erklärung geben.

3 Stimmen

@JoePlante Der Fragesteller wollte wissen, wie er sich als Mensch die Zahl (d. h. ihre Dezimalziffern) merken kann. Ich weiß nicht, wie es Ihnen geht, aber das Parsen von Hexadezimalzahlen und die anschließende Bitverschiebung ist für meine geistige Hardware keine intuitive Operation. Wenn Sie diesen Ansatz wählen, können Sie genauso gut einfach 2^31-1 berechnen.

0 Stimmen

Die Frage, die ich beantworten wollte, lautete: "Was ist der maximale Wert für einen int32?" Ich verstehe Ihren Standpunkt, @MarkAmery, aber wenn ich daran denke, diese Zeile in einen Interpreter oder in eine Druckanweisung einzugeben, kann ich mir die Zahlen tatsächlich merken. Es funktioniert auch als allgemeines Muster für andere Größen. Vielen Dank für die Unterstützung @JoePlante!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X