it-swarm-eu.dev

Jaká je maximální hodnota int32?

Nikdy si to číslo nepamatuju. Potřebuji pravidlo paměti.

1342
Flinkman

Je to 2 147 483 647. Nejjednodušší způsob, jak si to zapamatovat, je tetování.

4882
Ben Hoffstein

Nejsprávnější odpověď, kterou si myslím, je Int32.MaxValue.

475
Adrian Clark

Pokud si myslíte, že je hodnota v základně 10 příliš těžko zapamatovatelná, zkuste základnu 2: 1111111111111111111111111111111

422
Curd

Je to 10 číslic, takže předstírejte, že je to telefonní číslo (za předpokladu, že jste v USA). 214-748-3647. Nedoporučuji to zavolat. 

280
WildJoe

pokud si zapamatujete celé číslo Pi, pak číslo, které hledáte, je v pozici 1,867,996,680 až 1,867,996,689 desetinných míst Pi 

Číselný řetězec 2147483647 se zobrazí na 1 867 996 680 desetinných míst Pi. 3.14 ...... 861812218099364523462147483647 10527835665425671614 ...

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

268

Namísto toho, abyste to považovali za jedno velké číslo, zkuste to rozdělit a hledat související nápady, např.:

  • 2 maximální přestávky na snooker (maximální přestávka je 147)
  • 4 roky (48 měsíců)
  • 3 roky (36 měsíců)
  • 4 roky (48 měsíců)

Výše uvedené platí pro největší záporné číslo; pozitivní je to mínus jedna.

Možná, že výše uvedené členění nebude pro vás více nezapomenutelné (je to sotva vzrušující!), Ale doufejme, že můžete přijít s nápady, které jsou!

161
Luke Bennett

Největší negativní (32bitová) hodnota: -2147483648
(1 << 31)

Největší pozitivní (32bitová) hodnota: 2147483647
~ (1 << 31)

Mnemonic: "opilý AKA nadržený"

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

Vezměte si tento regex (určuje, zda řetězec obsahuje nezáporné celé číslo v desetinném tvaru, který také není větší než 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]

Možná by vám to pomohlo vzpomenout si.

69
Chizh

Tak jsem si vzpomněl na 2147483647:

  • 214 - protože 2,14 je přibližně pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Napište je vodorovně:

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

Teď máš 2147483647.

Doufám, že to pomůže alespoň trochu.

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

Tak, 2 ^ 31 (podepsaný int max) je 2 ^ 30 (asi 1 miliarda) časy 2 ^ 1 (2), nebo asi 2 miliardy. A 2 ^ 32 je 2 ^ 30 * 2 ^ 2 nebo asi 4 miliardy. Tato metoda aproximace je dostatečně přesná až kolem 2 ^ 64 (kde chyba roste na cca 15%).

Pokud potřebujete přesnou odpověď, pak byste měli vytáhnout kalkulačku.

Šikovné aproximace kapacity v aplikaci Word:

  • 2 ^ 16 ~ = 64 tis. // uint16
  • 2 ^ 32 ~ = 4 miliardy // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillion (aka 16 miliard miliard nebo 16 milionů bilionů) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillion quintillion (aka 256 bilionů bilionů biliónů) // IPv6, GUID
56
Wedge

Stačí vzít nějaké slušné kalkulačka a typ v "7FFFFFFF" v hex režimu, pak přepnout na desetinné místo.

2147483647.

44
darron

Je to o 2.1 * 10^9. Není třeba znát přesné 2^{31} - 1 = 2,147,483,647.

C

Naleznete ho v C takhle:

#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ává (dobře, bez ,)

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

Jáva

Můžete to také získat pomocí jazyka Java:

System.out.println(Integer.MAX_VALUE);

Ale mějte na paměti, že celá čísla Java jsou vždy podepsána.

Python 2

Python má libovolná přesná celá čísla. Ale v Pythonu 2 jsou mapovány na C celá čísla. Můžete to udělat takto:

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

Python tedy přepne na long, když se celé číslo zvětší než 2^31 -1

34
Martin Thoma

Zde je mnemotechnická pomůcka pro zapamatování 2 ** 31, odečtěte jeden pro získání maximální celočíselné hodnoty.

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

Využil jsem moc dva až 18 často dost na to, abych si je pamatoval, ale ani jsem se neobtěžoval zapamatovat si 2 ** 31. Je příliš snadné vypočítat podle potřeby nebo použít konstantu nebo odhadnout 2G.

33
Mark Ransom

32 bitů, jeden pro označení, 31 bitů informací:

2^31 - 1 = 2147483647

Proč -1?
Protože první je nula, tak největší je count mínus jedna.

EDIT pro cantfindaname88

Počet je 2 ^ 31, ale největší nemůže být 2147483648 (2 ^ 31), protože počítáme od 0, ne 1.

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

Další vysvětlení pouze s 3 bity: 1 pro označení, 2 pro informaci

2^2 - 1 = 3

Pod všemi možnými hodnotami se 3 bity: (2 ^ 3 = 8 hodnot)

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

Má 32 bitů a může tedy ukládat 2 ^ 32 různých hodnot. Polovina z nich je negativní.

Řešení je 2,147,483,647

A nejnižší je −2,147,483,648.

(Všimněte si, že existuje ještě jedna záporná hodnota.)

29
Sarien

V tomto bodě bych řekl, že nejjednodušší mnemotechnická pomůcka je napsat "stackoverflow.com" TAB "maximum int32" do Chrome.

Tam je rekurze -> zásobník přetečení vtip tam někde. Nejsem jen tak podivínský.

28

Kromě vtipů, pokud opravdu hledáte pravidlo pro užitečné paměti, existuje vždy ten, který vždy používám pro zapamatování velkých čísel.

Musíte rozdělit své číslo na části ze 3-4 číslic a pamatovat je vizuálně pomocí projekce na klávesnici mobilního telefonu. Je jednodušší zobrazit na obrázku:

 enter image description here

Jak můžete vidět, od teď stačí si zapamatovat 3 tvary, 2 z nich vypadají jako Tetris L a jeden vypadá jako klíště. Což je rozhodně mnohem snazší než zapamatování desetimístného čísla.

Když potřebujete vzpomenout na číslo, stačí si jen vzpomenout na tvary, představit si/podívat se na klávesnici telefonu a promítnout na nich tvary. Možná se zpočátku budete muset podívat na klávesnici, ale po chvilce praxe si budete pamatovat, že čísla se pohybují zprava doleva do pravého dolního rohu, takže si ji budete moci jednoduše představit v hlavě.

Jen se ujistěte, že si pamatujete směr tvarů a počet číslic v každém tvaru (například v příkladu 2147483647 máme čtyřmístný Tetris L a 3místný L).

Tuto techniku ​​můžete použít k snadnému zapamatování si důležitých čísel (například jsem si vzpomněl na šestnáctimístné číslo kreditní karty atd.).

21
Ivan Yurchenko

Nejjednodušší způsob, jak to udělat pro celá čísla, je použít hexadecimální, za předpokladu, že neexistuje něco jako Int.maxInt (). Důvodem je toto:

Max nepodepsané hodnoty

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

Podepsané hodnoty s použitím 7F jako maximální podepsané hodnoty

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

Podepsané hodnoty s použitím hodnoty 80 jako maximální podepsané hodnoty

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

Jak tohle funguje? To je velmi podobné binární taktice a každá hexadecimální číslice je přesně 4 bity. Také mnoho kompilátorů podporuje hex mnohem lépe, než podporují binární. 

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

Takže 7F je rovna 01111111/7FFF je rovna 0111111111111111. Také pokud používáte toto pro "šíleně vysokou konstantu", 7F ... je bezpečný hex, ale je to dost snadné vyzkoušet 7F a 80 a jen je vytisknout na obrazovku, abyste zjistili, který z nich je.

0x7FFF + 0x0001 = 0x8000, takže vaše ztráta je pouze jedno číslo, takže pomocí 0x7F ... obvykle není špatný kompromis pro spolehlivější kód, zvláště když začnete používat 32 bitů nebo více

21
Joe Plante

Nejdříve si dvakrát zapište 47, (líbí se vám Agent 47 , vpravo?) A ponechte mezery tak, jak je zobrazeno (každá pomlčka je slot pro jednu číslici. První 2 sloty, pak 4)

--47----47

Myslíte, že máte v ruce 12 (protože 12 = tucet). Vynásobte ji 4, první číslicí čísla agenta 47, tj. 47, a umístěte výsledek vpravo od prvního páru, který již máte

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

Pak vynásobte 12 podle 3 (za účelem vytvoření druhé číslice čísla agenta 47, což je 7, potřebujete 7 - 4 = 3) a umístěte výsledek napravo od prvních 2 párů, poslední párový slot

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

Nakonec přetáhněte číslice jeden po druhém z ruky začínající od pravé číslice (2 v tomto případě) a umístěte je do prvního prázdného slotu, který dostanete

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

Tady to máš! Pro záporný limit, můžete si myslet, že jako 1 více v absolutní hodnota než kladný limit.

Praxe několikrát, a dostanete na kloub!

20

2 GB

(existuje minimální délka odpovědí?)

19
Rune

Pokud znáte vaši ASCII tabulku off srdcem a ne MaxInt:
!GH6G = 21 47 48 36 47

16
Mark Hurd

Nejlepší pravidlo pro zapamatování je:
21 (magické číslo!)
47 (zapamatuj si to)
48 (sekvenční!)
36 (21 + 15, obě kouzla!)
47 znovu

Také je snazší zapamatovat si 5 párů než 10 číslic.

16
MacGyver

Za předpokladu .NET -

Console.WriteLine(Int32.MaxValue);
15
Kev

Je zajímavé, že Int32.MaxValue má více znaků než 2,147,486,647.

Ale pak máme opět dokončení kódu,

Takže si myslím, že všechno, co opravdu musíme zapamatovat, je Int3<period>M<enter>, což je pouze 6 znaků, které lze zadat ve vizuálním studiu.

UPDATE Z nějakého důvodu jsem byl downvoted. Jediný důvod, proč si můžu myslet, je, že můj první výrok nechápali.

"Int32.MaxValue" trvá nejvýše 14 znaků. 2,147,486,647 trvá 10 nebo 13 znaků, které lze zadat v závislosti na tom, zda vložíte čárky nebo ne.

15
NotMe

Nejjednodušší způsob, jak si zapamatovat, je podívat se na std::numeric_limits< int >::max()

Například ( z 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

Jen si pamatujte, že 2 ^ (10 * x) je přibližně 10 ^ (3 * x) - na to jste pravděpodobně již zvyklí s kilobajty/kibibyty atd. To je:

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

Jelikož int používá 31 bitů (+ ~ 1 bit pro označení), stačí dvojnásobek 2 ^ 30, abyste získali přibližně 2 miliardy. Pro nepodepsané int pomocí 32 bitů, zdvojnásobte znovu pro 4 miliardy. Chybový faktor se zvyšuje, čím větší je, samozřejmě, ale nepotřebujete přesnou hodnotu zapamatovanou (pokud ji potřebujete, měli byste pro ni stejně použít předem definovanou konstantu). Přibližná hodnota je dost dobrá na to, aby si všimla, kdy se něco může stát nebezpečně blízko k přetékání.

11
Brian

to je to, jak si to pamatovat 2,147,483,647

Do daleko savany čtvrtletí optimus trio hexed čtyřicet septenary

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

Co myslíš? Mělo by být snadné si zapamatovat, že je to 2 ^ 32. Pokud chcete, aby pravidlo zapamatovalo hodnotu tohoto čísla, šikovným pravidlem je převod mezi binárními a desetinnými místy obecně:

2 ^ 10 ~ 1000

což znamená 2 ^ 20 ~ 1 000 000

a 2 ^ 30 ~ 1 000 000 000

Zdvojnásobit to (2 ^ 31) je rounghly 2 miliardy, a zdvojnásobit to znovu (2 ^ 32) je 4 miliardy.

Je to snadný způsob, jak získat hrubý odhad nějakého binárního čísla. 10 nula v binárním režimu se stane 3 nulami v desítkové soustavě.

7
jalf

V Objective-C (iOS & OSX) si zapamatujte tato makra:

#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

Jako fyzik bych jen zašel na 2 miliardy (semi-vtip). Snadné zapamatování!

6
bersling

Int32 znamená, že máte 32 bitů k uložení vašeho čísla. Nejvyšší bit je sign-bit, což indikuje, zda je číslo kladné nebo záporné. Takže máte 2 ^ 31 bitů pro kladná a záporná čísla. 

S nulovým kladným číslem získáte logický rozsah (uvedený výše)

+2147483647 až -2147483648

Pokud si myslíte, že je to malé, použijte Int64:

+9223372036854775807 až -9223372036854775808

A proč si sakra chceš pamatovat toto číslo? Chcete použít kód? Měli byste vždy používat kód Int32.MaxValue nebo Int32.MinValue v kódu, protože se jedná o statické hodnoty (v rámci jádra .net) a tedy rychlejší než použití nového kódu int.

Moje prohlášení: pokud znáte toto číslo pamětí .. právě se předvádíte!

5
Andre Haverdings

Pamatujte na to: 21 IQ POLOŽKA 47

To může být de-enkódován s jakýmkoliv telefonem pad, nebo můžete prostě napsat jeden dolů na papír.

Abych si vzpomněl na "21 IQ ITEM 47", šel bych s "Hitmanem: Codename 47 měl 21 misí, z nichž každý byl sám IQ ITEM".

Nebo "čistím zuby každý den ve 21:47, protože mám vysoké IQ a nelíbí se mi věci v ústech".

5
soprof

S Groovy na cestě:

groovy -e " println Integer.MAX_VALUE "

(Groovy je velmi užitečný pro rychlou orientaci v kontextu Java.)

4
Michael Easter

Nikdy nezapomenout na maximální hodnotu jakéhokoli typu:

Pokud má 32 bitů, největší možnou hodnotou by bylo 32 bitů s číslem 1:

 enter image description here

Výsledek by byl 4294967295 v desítkové soustavě:

 enter image description here

Ale jak je zde také znázornění záporných čísel, rozdělte 4294967295 podle 2 a získejte 2147483647.

32-bitové celé číslo je tedy schopno reprezentovat -2147483647 až 2147483647

2

Takhle si pamatuji ...
V hexu, číslice představuje čtyři bity, takže 4 * 8 = 32, takže maximální podepsaný 32 bit int je:

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

Vyzkoušejte v Pythonu:

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

Je to 2147483647, ale to opravdu nemusíte zapamatovat. Záleží na tom, kolik číslic může mít vaše číslo. Někdy můžete místo toho použít krátký int.

Pokud by však přetečení mohlo být pro váš program katastrofální, možná budete muset použít knihovnu pro neomezenou velikost (bude však pomalejší).

2
theo2003

Udělal jsem pár geniálních metod v C #, které můžete využít ve svém produkčním prostředí:

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

Zde je to, co musíte pamatovat:

  • Je to 2 miliardy.
  • Další tři triplety se zvyšují takto: 100s, 400s, 600s
  • První a poslední triplet potřebují k nim přidat 3, aby se zaokrouhlili nahoru na 50 (např. 147 + 3 = 150 & 647 + 3 = 650)
  • Druhý triplet potřebuje 3 od něj odečíst, aby se zaokrouhlil dolů na 80 (např. 483 - 3 = 480)

Odtud 2, 147, 483, 647

2
G.Rassovsky

Další způsob, jak dosáhnout tohoto čísla:

  1. Přehrajte 2048 až do maximálního teoretického limitu. Na obrázku: 15 tahů před USHRT_MAX.
  2. Vyznačte výsledek. O UINT_MAX.
  3. Vydělte 2 a - 1, abyste získali INT_MAX.

 enter image description here

2
Uri

Použití REPL jazyka Java 9, jshell :

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

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

Jen nezapomeňte, že je to osmý Mersenne.

Pokud je to příliš těžké, je to také třetí ze čtyř známých double Mersenne připraví.

Upravit podle požadavku na komentář:

Euclid-Eulerova věta uvádí, že každé dokonalé číslo má formu 2n - 1 (2n - 1), kde 2n - 1 je prvočíslo. Primární čísla formy 2n - 1 být známý jako Mersenne připraví, a vyžadovat n sám být prvočíslo.

Víme, že délka INT32 je samozřejmě 32 bitů. vzhledem k obecně uznávanému chápání doplňku 2 je podepsaný INT32 32 bitů - 1 bit. 

Abychom zjistili velikost binárního čísla s daným počtem bitů, zpravidla se zvýší hodnota 2 na výkon n, mínus 1, kde n se rovná počtu bitů.

Výpočet velikosti je tedy 2 ^ (32 - 1) - 1 = 2 ^ 31 - 1. 31 je prvočíslo a jak je uvedeno výše, prvočísla této formy jsou Mersenne připravuje. Můžeme dokázat, že je to osm takových, prostě je spočítáme. Pro další podrobnosti, prosím, zeptejte se Eulera, nebo možná Bernoulliho (ke kterému o nich napsal).

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

1
Toby

V binárním systému zjistíte, že maximální hodnota Int32 je 1111111111111111111111111111111 , Ale v deseti z nich zjistíte, že je 2147483647 nebo 2 ^ 31-1 nebo Int32.MaxValue

1
trinalbadger587
  1. Zvedněte 31 generací králíků.
  2. Udělejte 1-králičí guláš. *
  3. Spočítejte zbývající králíky.

* Jak si udělat králík guláš? Nevím, podívejte se na internet.

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

Kompilátor by jej přesto měl optimalizovat.

Dávám přednost 1 << 31 - 1 

0x7fffffff protože nepotřebujete počet fs

unsigned( pow( 2, 31 ) ) - 1, protože nepotřebujete <math.h>

0
lllllllllll

Je to 2 ^ 31 - 1 (32 bitů, jeden se používá pro označení).

Pokud chcete přibližnou hodnotu, použijte 2 ^ 10 = 1024 ~ 10 ^ 3, takže 2 ^ 31 ~ 2 * 10 ^ 9. Chcete-li vypočítat přesnou hodnotu ručně, použijte umocnění squaringem, abyste se dostali na 2 ^ 32 = 2 ^ (2 ^ 5) a dělte dvěma. Stačí pouze pětkrát čtverec, abyste získali 2 ^ 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

rozdělením na dva a odečtením jeden vám dává 2147483647. Pokud nepotřebujete všechny číslice, ale jen chcete říct, první tři významné číslice, výpočty na každém kroku squaring jsou velmi snadné.

0
saolof

Vždycky se dívám do Babelské knihovny, sbírky všech možných textů s anglickou abecedou.

Odkaz na konkrétní stránku konkrétní knihy na konkrétním místě v konkrétní sekci je zde: https://libraryofbabel.info/bookmark.cgi?max_int32

0
Thediabloman

V C použijte INT32_MAX po #include <stdint.h>. V C++ použijte INT32_MAX po #include <cstdint>.

Nebo INT_MAX pro velikost specifickou pro platformu nebo UINT32_MAX nebo UINT_MAX pro unsigned int. Viz http://www.cplusplus.com/reference/cstdint/ a http://www.cplusplus.com/reference/climits/ .

Nebo sizeof(int).

0
Reed Hedges

Obecně můžete udělat jednoduchou operaci, která odráží samotnou povahu Int32, vyplňte všechny dostupné bity 1's - To je něco, co můžete snadno držet ve vaší paměti. Funguje v podstatě stejným způsobem ve většině jazyků, ale pro příklad používám Python:

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

Pro nepodepsané Int32, aby to 32 místo 31 1.

Ale protože tam jsou zaslány několik dobrodružnějších přístupů, začal jsem myslet na vzorce, jen pro zábavu z toho ...

Formule 1 (Čísla jsou spojena, pokud není uveden žádný operátor)

  • a = 4
  • b = 8
  • bekot
  • 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'

Formule 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

Použij svou představivost!

Zavřete oči a podívejte se na starého jednolitého čínského farmáře Wanga, který se i přes svůj handicap stal nejbohatším a nejsilnějším pastýřem v Číně (tedy i na celém světě). Jeho rodina se skládá ze sebe, manželky, čtyřech synů a ovce Alice. Jednoho dne je shromáždil na nekonečném travnatém poli pokrytém miliony ovcí a řekl:

Jsem starý a unavený. Rozhodl jsem se tedy rozdělit své bohatství mezi své syny.

Ukázal na všechny ovce:

To jsou moje děti. Každý z vás dostane 123456789 bílých ovcí, 10101010 černých ovcí, 203040 spatřených ovcí, 444888 jehňat a 12000 beranů. Pes budu pro sebe. To je to, co jsem řekl.

Opřel se o rameno své ženy a usmál se.

Takže ... můj přítel, představte si tento obrázek! Obraz je tak živý a skutečný, jak můžete! Nechte to žít před očima!

Pak poklekněte ... a začněte počítat! Počet noh na tomto poli je maximální hodnota int32.

Existují však dvě známé chyby popsané metody:

  1. Lidská představivost nepozná hranice ... takže je těžké omezit se a představit si přesný počet ovcí na tomto poli, aniž byste museli počítat více ovcí.
  2. Lidé jsou líní ... tak se mnoho lidí snaží počítat ovce a násobit čtyřmi místo počítání nohou, ale ... hádej, co - padnou spát.
0
StoYan

Je velmi snadno zapamatovatelné. V šestnáctkové soustavě je jedna číslice 4 bity. Takže pro unsigned int napište 0x a 8 fs (0xffffffff) do Pythonu nebo Ruby Shell, abyste získali hodnotu v základu 10. Pokud potřebujete podepsanou hodnotu, nezapomeňte, že jako znak je použit nejvyšší bit. Takže to musíš opustit. Stačí si jen zapamatovat, že číslo, kde jsou nižší 3 bity 1 a 4. bit 0, se rovná 7, takže zapište 0x7fffffff do Pythonu nebo Ruby Shell. Můžete také napsat 0x100000000 - 1 a 0x80000000 - 1, pokud je to pro vás snadnější zapamatovat.

0
panzi