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.

0voto

wiesion Punkte 2150

Im Allgemeinen können Sie eine einfache Operation durchführen, die die Natur eines Int32 widerspiegelt, nämlich alle verfügbaren Bits mit 1en zu füllen. Es funktioniert im Grunde genommen in den meisten Sprachen auf die gleiche Weise, 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's, machen Sie es 32 statt 31 1's.

Aber da es ein paar abenteuerlichere Ansätze gibt, habe ich angefangen, mir Formeln auszudenken, nur so zum Spaß...

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

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

Python-Schnellprüfung

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-Schnellprüfung

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

0voto

Matt Malone Punkte 431

"Wenn eine große ganze Zahl nicht abgerufen wird, rufen Sie diese Eselsbrücke auf."

Zählen Sie nun die Buchstaben in jedem Wort.

-1voto

saolof Punkte 829

Es sind 2 31 - 1 (32 Bits, eines wird für das 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 genauen Wert von Hand berechnen wollen, verwenden Sie die Potenzierung durch Quadrieren, um auf 2 zu kommen 32 \= 2 (2 5 ) und teilen Sie durch zwei. Du brauchst nur fünfmal zu quadrieren, um 2 zu erhalten 32 :

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

Teilt man dies durch zwei und zieht eins ab, erhält man 2.147.483.647. Wenn Sie nicht alle Ziffern benötigen, sondern nur die ersten drei signifikanten Ziffern, sind die Berechnungen bei jedem Quadrierungsschritt sehr einfach.

-1voto

lllllllllll Punkte 154
max_signed_32_bit_num = 1 << 31 - 1;  // alternatively ~(1 << 31)

Ein Compiler sollte sie ohnehin optimieren.

Ich bevorzuge 1 << 31 - 1 über

0x7fffffff weil Sie nicht zählen müssen f s

unsigned( pow( 2, 31 ) ) - 1 denn Sie brauchen keine <math.h>

0 Stimmen

Sie können Unterstriche verwenden, um die Lesbarkeit in einigen Sprachen zu verbessern. Soweit ich weiß, unterstützen Java und Swift dies, vielleicht auch andere. 0x7FFF_FFFF

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