İnt32 için maksimum değer nedir?


1380

Numarayý asla hatýrlayamýyorum. Bir hafıza kuralına ihtiyacım var.


48
imzasız: 2³²-1 = 4 · 1024³-1; işaretli: -2³¹ .. + 2³¹-1, çünkü işaret biti en yüksek bittir. Sadece 2⁰ = 1 ila 2¹⁰ = 1024 öğrenin ve birleştirin. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad

31
Genelde her 3 bitin yaklaşık ondalık basamak olduğunu hatırlıyorum. Bu beni doğru büyüklük sırasına götürür: 32 bit 10 basamaktır.
Barmar

8
@JoachimSauer, en azından bu tür sayıları tanımayı öğrenirseniz, hata ayıklamaya kesinlikle yardımcı olabilir.
Dunaril

72
"bir disk dolarsa, tüm mbaytların silinmesi arşivlenir" (2 harf, 1 harf, 4 harf, 7 harf, 4 harf, 8 harf, 3 harf, 6 harf, 4 harf, 7 harf)
UltraCommit

8
İnt32 yeterli olmadığında bir durum: bbc.com/news/world-asia-30288542
ingaham

Yanıtlar:


5073

2.147.483.647. Ezberlemenin en kolay yolu bir dövme ile.


83
Anımsatım: 2 ^ 10 1000'e çok yakın, bu nedenle 2 ^ (3 * 10) 1000 ^ 3 veya yaklaşık 1 milyar. 32 bitten biri işaret için kullanılır, bu nedenle maksimum değer gerçekten sadece 2 ^ 31'dir, bu da 2 ^ (3 * 10): 2 milyar için aldığınız miktarın yaklaşık iki katıdır.
16807

164
Virgülsüz 2147483647.
Vern D.

20
Basitçe: Integer.MAX_VALUEJava'da kullanın .
Tim

184
Dövmeyi yüzünüze alırsanız, aynada doğru okunması için tersine çevirmeyi unutmayın. Aksi takdirde yanlış ve utanç verici 746.384.741,2'yi görürsünüz.
Larry S

127
2.147.483.647 = 0x7FFFFFFF, hatırlamak istiyorsanız, sadece hex kullanın.
roottraveller

493

Aklıma gelen en doğru cevap Int32.MaxValue.


18
Bu var olmadan önce #TIN32_MIN ve INT32_MAX'ı tüm projelerimde tanımladım.
WildJoe

45
@CamiloMartin Hey. Tekrar gönderdim. Daha fazla dövmeye yer yoktu. Açıkçası, iso-8859-1 karakter kümesi ve
31415

3
Programlarken: vakaların% 99'unda evet. Ancak, programlama yaklaşımlarını planlamada veya verilerle çalışırken ~ 2 milyar gibi bir şey olduğunu bilmek isteyebilirsiniz, ancak çok büyük bir sayıdır. :)
Andre Figueiredo

@sehe latin1 / Windows 1252 artık kullanılmıyor mu? ASCII'nin 7 baytına sığamazsa, ana bellekte bir yeri hak ettiğini düşünmüyorum. Yani ... tüm UNICODE kod sayfaları biraz faydalıdır, ancak bir meg cilt alanı üzerinde israf gibi görünüyor. (Yine de "pageup / pagedown" veya "pagehome / pageend" için açıklayıcı glifler içermediğinden bahsetmiyoruz)

1
Bu özellik ayrıca doğru numaradan bahsetmek için iyi bir tavsiye olabilir. Ancak, bu yanıtı beğenmiyorum çünkü sadece değeri dertermining'in portatif olmayan bir yolundan bahsediyor ve bunun hangi programlama dillerinin işe yaradığından bahsetmiyor ...
mozzbozz

439

Baz 10'da değerin hatırlanması çok zor düşünüyorsanız, baz 2'yi deneyin: 111111111111111111111111111111111


145
@Nick Whaley: Hayır, 1111111111111111111111111111111 olumlu. 11111111111111111111111111111111 negatif olur :-)
Curd

58
Base 16 daha da kolay 7FFFFFFF
Nelson Galdeman Graziano

34
@Bir 11111111111111111111111111111111taban-2 sayısı olarak curd hala pozitif olur (baz-2'de negatif bir örnek olur -1) . Bu bit dizisi yalnızca 32 bit 2'nin tamamlayıcı numarasını temsil ediyorsa negatiftir :)
BlueRaja - Danny Pflughoeft

143
Hatırlaması en kolay taban 2.147.483.647 olacaktır. O zaman hatırlamanız gereken tek şey 1
big_tommy_7bb 18:14

82
@ tim_barber_7BB aslında, bu 10
fscheidl

317

Pi numarasının tamamını hatırlayabiliyorsanız, aradığınız sayı Pi'nin ondalık basamağının 1.867.996.689'a kadar 1.867.996.680 pozisyonundadır.

Sayısal dize 2147483647, Pi'nin 1.867.996.680 ondalık basamağında görünür. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

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


30
biliyorsunuz, cevabınızı okumaya başladığımda, 20'inci basamak gibi pratik bir şey bekliyordum.
JqueryToAddNumbers

95
Bu oldukça havalı görünüyor. 1.867.996.680'i hatırlamak için başka bir bellek kuralı var mı? Hangi dizine bakmaya başlayacağımı hatırlamakta zorlanıyorum ....
Alderath

10
" Pi numarasının tamamını hatırlayabiliyorsanız ... " - hayır, yapamazsınız, bu mantıksızdır (muhtemelen bu Soru ve Cevaplardaki bir veya iki gönderi gibi) 8-D
SlySven

10
@Alderath Ben tipik olarak 380,630,713 basamak numarasından başlayan sqrt (2) 10 ondalık olarak hatırlıyorum ....
Henrik

2
@Alderath: 1867996680 sayısal dizgisi 2'nin Kök Kökünün 380.630.713. ondalık basamağında görünür.
Yair Halberstadt

290

10 basamaklı, bu yüzden bir telefon numarası gibi davranın (ABD'de olduğunuzu varsayarak). 214-748-3647. Aramanı tavsiye etmiyorum.


13
Bir telefon numarası olarak hatırlamaktan bahsetmişken, onu kullanan bazı telefon spam göndericileri olabilir gibi görünüyor: mrnumber.com/1-214-748-3647
Steven

8
Dallas'ta "748" borsası yok. Bu sayı sahte. " - shambleh tarafından bağlanan sayfadan
Tarnay Kálmán

104
@Steven Ben spam olduğunu düşünmüyorum, sadece telefon numarasını MySQL INTyerine yanlışlıkla saklayan insanlar VARCHAR.
Zarel

8
Onu aramayı denedim. Birkaç kez çaldı sonra hata çevirme tonuna gitti. = (
Krythic

172

Bunu büyük bir sayı olarak düşünmek yerine, parçalamayı ve ilişkili fikirleri aramayı deneyin, örneğin:

  • 2 maksimum snooker molası (maksimum mola 147'dir)
  • 4 yıl (48 ay)
  • 3 yıl (36 ay)
  • 4 yıl (48 ay)

Yukarıdaki en büyük negatif sayı için geçerlidir; pozitif, eksi bir.

Belki de yukarıdaki arıza sizin için daha fazla unutulmaz olmayacak (bu pek heyecan verici değil!), Ama umarım bazı fikirler bulabilirsin!


99
Bu gördüğüm en karmaşık mnömonik cihazlardan biri. Etkileyici.
Ben Hoffstein

9
Heh, Derren Brown'un beğenileri aslında bu tür bir yaklaşımı savunuyor - bir sayıyı rastgele bir şeye bölmek, ancak whieh
Luke Bennett

19
Daha iyi bir anımsatıcım var: görünüşe göre tam olarak 2 ^ 31 olduğu için hatırlamanız gereken tek şey 2 ve 31! Oh, bekleyin ...
Tamas Czinege

28
@DrJokepu Operatör önceliğinden emin değilim ... Bu demek mi 2^(31!)yoksa (2^31)!?
Alderath

1
@Lucio Cevabımın ilk etapta 47 ile bitmeyen 48 ile biten en büyük negatif sayı ile ilgili olduğunu unutmayın
Luke Bennett

144

En büyük negatif (32 bit) değeri: -2147483648
(1 << 31)

En büyük pozitif (32bit) değeri: 2147483647
~ (1 << 31)

Anımsatıcı: "sarhoş AKA azgın"

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
Dünyaları hatırlamak en zor Mnemonic. 0118 999 88199 9119 752 ... 3'ü ezberleyebiliyorsanız bunu ezberleyebilirsiniz.
BenM

11
@Rondles Bence sonunda 7253.
Tim Tisdall

21
Hayır! Burada içki içme yaşı 18'dir ... Görünüşe göre bu anımsatıcıyı kullanamıyorum, hayatım mahvoldu.
Joffrey

4
@Aaren Cordova Stackoverflow'un asla komik olmayacağını, bir Soru-Cevap sitesinden başka bir şey olmadığını söylerlerdi, genellikle bu cevaba işaret ederim. Bu şey sadece bir dahi zihnine oluşturulabilir, bu demek değildir Mad.
Mohd Abdul Mujib

5
En büyük negatif 32 bit tam sayı veya bu konu için 64 bit -1'dir.
Fred Mitchell

75

Her neyse, bu normal ifadeyi alın (dizenin ondalık formda Int32.MaxValue değerinden büyük olmayan, negatif olmayan bir Tamsayı içerip içermediğini belirler)

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

Belki hatırlamanıza yardımcı olur.


12
Bu bana çok daha kolay ve eğlenceli geliyor. Aslında bundan çok daha kolay 2147483647. Bu OP için çok yardımcı olacaktır
Sнаđошƒаӽ

61

Ben böyle hatırladım 2147483647:

  • 214 - çünkü 2.14 yaklaşık pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Bunları yatay olarak yazın:

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

Şimdi 2147483647 var.

Umarım bu en azından biraz yardımcı olur.


3
Güzel bir! Bence 214 kuralı pi - 1 olmalı. Ayrıca maske 64 yerine 68 gösteriyor.

Bundan daha ileri gidebilirsin. Ondalık değeri bırakın ve pi ile 2 ^ 31-1 değerlerini karşılaştırın. Aynı pozisyonlarda 141'e karşı 147 alırsınız, bu yüzden son rakam sadece 7 olur. Sonra 592'ye 483, hepsi birbirinden bir rakam uzakta. Ve 643'e 647'ye karşı, yine 7 şey oluyor.
Peter Cooper

@PeterCooper pi için ondalık basamaklar 1415926_5_35 ile başlar (Not 5, 4 değil)
Moberg

15
Anımsatım 4294967296 (hatırlanması kolay) almak ve 2'ye bölmek
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

Yani, 2 ^ 31 (işaretli int max) 2 ^ 30 (yaklaşık 1 milyar) çarpı 2 ^ 1 (2) veya yaklaşık 2 milyar'dır. Ve 2 ^ 32, 2 ^ 30 * 2 ^ 2 veya yaklaşık 4 milyar'dır. Bu yaklaşım yöntemi, yaklaşık 2 ^ 64'e kadar (hata yaklaşık% 15'e kadar büyür) bile yeterince doğrudur.

Kesin bir cevaba ihtiyacınız varsa bir hesap makinesi çıkarmalısınız.

Kullanışlı kelime uyumlu kapasite yaklaşımları:

  • 2 ^ 16 ~ = 64 bin // uint16
  • 2 ^ 32 ~ = 4 milyar // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillion (aka 16 milyar milyar veya 16 milyon trilyon) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillion quintillion (diğer adıyla 256 trilyon trilyon trilyon) // IPv6, GUID

76
Sabit disk üreticileri bunu söyledi.
Scott Stafford

46

Sadece iyi bir hesap makinesi alın ve onaltılık modunda "7FFFFFFF" yazın, sonra ondalık sayıya geçin.

2147483647.


150
Herhangi bir iyi hesap makinesi de 2 ^ 31 yapabilir.
Christoffer

17
Bilmiyorum 2 ^ 31 bunu yapmak için uzun bir yol gibi görünüyor: /
Devletler

2
Ya da sadece hex'te hatırlayın
Vernon

4
Sadece ... yazma onaltılık bunu. Veya Int32.MaxValue/numeric_limits<int32_t>::max()
sehe


36

Hakkında 2.1 * 10^9. Kesin bilmeye gerek yok 2^{31} - 1 = 2,147,483,647.

C

C'de bu şekilde bulabilirsiniz:

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

verir (iyi, olmadan ,)

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

Bunu Java ile de alabilirsiniz:

System.out.println(Integer.MAX_VALUE);

Ancak, Java tam sayılarının her zaman imzalandığını unutmayın.

Python 2

Python keyfi hassasiyet tamsayılarına sahiptir. Ancak Python 2'de, C tamsayılarıyla eşlenirler. Böylece bunu yapabilirsiniz:

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

Böylece Python long, tamsayı daha büyük olduğunda2^31 -1


Python cevabı güncel değil bkz: stackoverflow.com/questions/13795758/…
NOhs

@NOhs Bağlantıyı takdir ediyorum, ancak Python cevabım "Python 2" hakkında (daha açık hale getirmek için 2 bölüm başlığına ekliyorum). Yani cevabım eski değil. (Ama Python 2, kuşkusuz)
Martin Thoma

35

İşte 2 ** 31'i hatırlamak için bir anımsatıcı, maksimum tamsayı değerini almak için birini çıkarın.

a = 1, b = 2, c = 3, d = 4 e = 5, K = 6, gr = 7, s = 8, i 9 =

Boys And Dogs Go Duck Hunting, Come Friday Ducks Hide
2    1   4    7  4    8        3    6      4     8

Onları hatırlamak için yeterince 18'e kadar ikisinin güçlerini kullandım, ama ben bile 2 ** 31'i ezberlemekten rahatsız olmadım. Gerektiği gibi hesaplamak veya sabit kullanmak veya 2G olarak tahmin etmek çok kolaydır.


3
2 ^ 10, 2 ^ 11, 2 ^ 12 veya 2 ^ 17 (hepsi sıfır olan) için ne yaparsınız?
supercat

2
@supercat Ben ya a = 0 rebase, ya da o = 0 kullanırdım.
Mark Ransom

Bu harika. Teşekkürler, hayatımı kurtarıyorsun.
chenz

31

32 bit, biri tabela için, 31 bit bilgi:

2^31 - 1 = 2147483647

Neden -1?
Birincisi sıfır olduğundan, en büyüğü sayım eksi birdir .

Cantfindaname88 için EDIT

Sayı 2 ^ 31'dir ancak en büyük 2147483648 (2 ^ 31) olamaz çünkü 1'den değil 0'dan sayıyoruz.

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

Sadece 3 bit içeren başka bir açıklama: 1 işaret için, 2 bilgi için

2^2 - 1 = 3

3 bitli tüm olası değerlerin altında: (2 ^ 3 = 8 değer)

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 = toplam kombinasyon, yani 0 ile (2 ^ 31 -1) arasında değişiyor. Evet, ilk 0
Luciano

30

Peki, 32 bit vardır ve bu nedenle 2 ^ 32 farklı değer saklayabilir. Bunların yarısı olumsuz.

Çözüm 2.147.483.647'dir.

Ve en düşük −2,147,483,648'dir.

(Bir negatif değerin daha olduğuna dikkat edin.)


32 biti vardır ve bu nedenle 2 ^ 32 değeri saklayabilir. Hayırsız.
JB.

28

Şakaların yanı sıra, gerçekten yararlı bir hafıza kuralı arıyorsanız, her zaman büyük sayıları hatırlamak için kullandığım bir kural vardır.

Numaranızı 3-4 basamaktan parçalara ayırmanız ve cep telefonu klavyenizdeki projeksiyonu kullanarak bunları görsel olarak hatırlamanız gerekir. Bir resimde göstermek daha kolaydır:

resim açıklamasını buraya girin

Gördüğünüz gibi, şu andan itibaren 3 şekli hatırlamanız gerekiyor, ikisi Tetris L'ye ve biri kene gibi görünüyor . Bu kesinlikle 10 basamaklı bir sayıyı ezberlemekten çok daha kolaydır.

Numarayı hatırlamanız gerektiğinde şekilleri hatırlayın, bir telefon klavyesinde hayal edin / bakın ve şekilleri üzerine yansıtın. Belki de başlangıçta klavyeye bakmanız gerekir, ancak biraz pratik yaptıktan sonra, sayıların soldan sağa doğru gittiğini hatırlarsınız, böylece sadece kafanızda hayal edebileceksiniz.

Şekillerin yönünü ve her bir şekildeki rakam sayısını hatırladığınızdan emin olun (örneğin, 2147483647 örneğinde 4 basamaklı Tetris L ve 3 basamaklı L var).

Bu tekniği, önemli sayıları kolayca hatırlamak için kullanabilirsiniz (örneğin, 16 basamaklı kredi kartı numaramı hatırladım).


Düzgün bir fikir! Şekil 1 size 2147 verir, Şekil 2 size 483 verir ve Şekil 3'ün 647 vermesi gerekir, ancak çizildiği gibi 6 5 47 olarak yorumlanabilir. Tüm çapraz sayıları ne zaman dahil edeceğimizi nasıl bilebilirim ) vs. ne zaman atlanır (Şekil 3'teki gibi)? Ayrıca şekillerin sırasıyla 4, 3 ve 3 basamak kodladığını hatırlamanız gerekir. Veya Şekil 3'ü düz bir çizgi yerine 6'dan 4'e kadar bir yayla çizebilirsiniz.
jskroch

@Squinch Özellikle int hatırlamak için bir sorun olmamalı çünkü yaklaşık 2 milyar olduğunu biliyorsunuz, bu yüzden içinde 10 sayı var (ve ilk şeklin 4 ve ikinci ve üçüncü sayıları varsa anlamına gelir) şekiller 3 buna göre). Ancak, bu yaklaşımı herhangi bir sayı için kullanmak istiyorsanız, bu güzel bir nokta. Ayrıca, bu şekilde kullanıldığında hatırlanması zor sayılar vardır (yani 1112 veya başka bir şey). Öte yandan, böyle bir sayıyı hatırlamak hiç de zor olmamalı. Bu yüzden size bağlı olduğunu söyleyebilirim, bunun için ilginç bir şey bulursanız bana bildirin. :)
Ivan Yurchenko

Evet, rastgele bir basamak dizisini hatırlamak için bu yöntemi kullanmayı düşünüyordum, ancak bu belirli int.Max değeri için yönteminiz oldukça iyi çalışıyor. Söylediğiniz gibi, tekrarlanan rakamlar bir sorundur. Aslında, tekrarlanan herhangi bir sekans (2323 gibi) bir sorundur. Kendini geçen herhangi bir dizinin (2058 gibi) çizilmesi zordur. Herhangi bir ezberleme tekniği birkaç bilgiyi hatırlamanızı gerektirir. Kafanıza en iyi hangi bilgi türlerinin yapıştığı kişisel tercihtir.
jskroch

1
Pin kodlarını ve benzerlerini bu şekilde hatırlıyorum, ama sonra aniden bilgisayarınıza yazmanız ve sayısal tuş takımının dikey olarak çevrildiğini anlamanız gerekiyor. Yani bu biraz zor.
nibarius

Dallas, Teksas'taki birisi birçok garip telefon görüşmesi aldı ve @IvanYurchenko'nun suçlayacağınız hakkında hiçbir fikri yok.
Bob Stein

21

Tamsayılar için bunu yapmanın en kolay yolu, Int.maxInt () gibi bir şey olmaması koşuluyla onaltılık kullanmaktır. Nedeni şudur:

Maksimum imzalanmamış değerler

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

İşaretli değerler, maksimum işaretli değer olarak 7F kullanılarak

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

İşaretli değerler, maksimum işaretli değer olarak 80 kullanılarak

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

Bu nasıl çalışıyor? Bu ikili taktiğe çok benzer ve her onaltılı basamak tam olarak 4 bittir. Ayrıca, bir çok derleyici, ikili desteği desteklediğinden çok daha iyi hex'i destekler.

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

Yani 7F eşittir 01111111 / 7FFF eşittir 0111111111111111. Ayrıca, bunu "delicesine yüksek sabit" için kullanıyorsanız, 7F ... güvenli altıgen, ancak 7F ve 80'i denemek ve yazdırmak için yeterince kolaydır hangisinin olduğunu görmek için ekranınıza.

0x7FFF + 0x0001 = 0x8000, bu nedenle kaybınız sadece bir sayıdır, bu nedenle 0x7F kullanmak, özellikle 32 bit veya daha fazla kullanmaya başladıktan sonra daha güvenilir kod için genellikle kötü bir tutar değildir.


21

47 üzerinden İlk yazma iki kez (sizin gibi Ajan 47 , değil mi?), Gösterildiği gibi boşlukları tutarak (her çizgi bir tek basamak için bir yuvadır. İlk 2 yuvaları, ardından 4)

--47----47

Elinizde olduğunu düşünün 12(çünkü 12 = bir düzine). 4Ajan 47'nin numarasının ilk basamağıyla çarpın , yani 47sonucu zaten sahip olduğunuz ilk çiftin sağına yerleştirin

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

Sonra çarpma 12tarafından 3(olan Ajan 47 numarası, ikinci haneyi yapmak için 7ihtiyacınız, 7 - 4 = 3ve ilk 2 çift sağında, son çifti yuvalı sonucu koymak)

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

Son olarak rakamları elinizden en sağdaki rakamdan başlayarak tek tek sürükleyin (bu örnekte 2) ve aldığınız ilk boş yuvaya yerleştirin

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

İşte aldın! Negatif sınır için, bunu mutlak değerde 1 daha düşünebilirsiniz pozitif sınırdan .

Birkaç kez pratik yapın ve asın!


"Mutlak değerde pozitif sınırdan 1 daha fazla" var.
Navin

20

2GB

(cevaplar için minimum bir süre var mı?)


18
Bu GiB olmamalı mı?
Jouke van der Maas

9
@JoukevanderMaas - Aslında 4B olmalı.
Ted Hopp

1
Bu yüzden 32 bit bir bilgisayarda sahip olabileceğiniz RAM sınırı 4GB
Serj Sagan

3
4GB değeri işaretsiz tamsayılarla doğrudur. İmzalı bir
int'iniz varsa,

3
32-bit'te kullanıcı işlemi için 2GB, çekirdek için 2GB bellek alanı vardır. Çekirdeğin yalnızca 1 GB ayrılmış olması için yapılandırılabilir
Rune

15

.NET varsayıldığında -

Console.WriteLine(Int32.MaxValue);

15

Eğer bilmek edersek ASCII tablosunu ezbere değil kapalı MaxInt:
!GH6G = 21 47 48 36 47


Bu yanıtı yazdığımda GH6G'nin çok fazla Google isabeti olduğunu bilmiyordum ve şimdi bunu kendim kullandım :-)
Mark Hurd

15

Ezberlemek için en iyi kural:
21 (sihirli sayı!)
47 (sadece hatırlayın)
48 (sıralı!)
36 (21 + 15, her ikisi de sihir!)
47 tekrar

Ayrıca 10 basamaktan 5 çift hatırlamak daha kolaydır.


14

Hatırlamanın en kolay yolu std::numeric_limits< int >::max()

Örneğin ( MSDN'den ),

// 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

İlginçtir, Int32.MaxValue, 2.147.486.647'den daha fazla karaktere sahiptir.

Ama sonra tekrar kod tamamlamamız var,

Bu yüzden ezberlemek zorunda olduğumuz Int3<period>M<enter>tek şey , görsel stüdyoda yazmak için sadece 6 karakter.

GÜNCELLEME Bir nedenden dolayı indirildim. Düşünebilmemin tek nedeni ilk ifademi anlamadıkları.

"Int32.MaxValue" yazılması en fazla 14 karakter alır. 2.147.486.647 virgül koyup koymamanıza bağlı olarak yazması 10 veya 13 karakter alır.


2
Ancak önemli olan, kaç karakter yazmanız gerektiği değil, onu nasıl hatırlayacağınızdır. Eminim Iwannagohomehatırlamak daha kolay 298347829. Ancak -1 için bir neden yok.
glglgl

3
Bundan daha az olabilir, sadece kendi maksimum değer snippet'inizi yapın, belki "imv" <tab> <tab>?
BradleyDotNET

4
Karakterler !=Tuş Vuruşları. Bu zayıf .Net kullanıcısı için in+ .+ ma+ Dönüş.
Michael - Clay Shirky

11

Sadece 2 ^ (10 * x) 'in yaklaşık 10 ^ (3 * x) olduğunu unutmayın - muhtemelen buna zaten kilobayt / kibibit vb.

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

Bir int 31 bit kullandığından (işaret için + ~ 1 bit), yaklaşık 2 milyar almak için sadece 2 ^ 30 çift. 32 bit kullanan imzasız bir int için, 4 milyar için tekrar iki katına çıkın. Hata faktörü elbette gittikçe büyür, ancak ezberlenen tam değere ihtiyacınız yoktur (İhtiyacınız varsa, bunun için önceden tanımlanmış bir sabit kullanmanız gerekir). Yaklaşık değer, bir şeyin taşmaya tehlikeli bir şekilde yakın olabileceğini fark etmek için yeterince iyidir.


10
Offtopik: 2 ^ 4 = 4 ^ 2, bu nedenle üstelleme değişmeli!
Adam Liss

10
@ Pier-OlivierThibault hayır, her zaman kullanıyorum! şimdi tüm matematiğimin neden yanlış geldiğini öğrenmem gerekiyor. muhtemelen çarpma hatalarıyla ilgili bir şey. neyse, güle güle!
Kapı tokmağı

9

2.147.483.647 hatırlamak için bunu nasıl yaparım

Uzak bir savana çeyrek optimus trio altıgen kırk septenary

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

7

Ne demek istiyorsun? Bunun 2 ^ 32 olduğunu hatırlamak yeterince kolay olmalıdır. Bir kuralın bu sayının değerini ezberlemesini istiyorsanız, genel olarak ikili ve ondalık arasında dönüştürme yapmak için kullanışlı bir kural vardır:

2 ^ 10 ~ 1000

yani 2 ^ 20 ~ 1.000.000

ve 2 ^ 30 ~ 1.000.000.000

Bunun iki katı (2 ^ 31) 2 milyar ve tekrar iki katına çıkması (2 ^ 32) 4 milyar.

Herhangi bir ikili sayı hakkında kabaca tahmin almanın kolay bir yoludur. İkili 10 sıfır, ondalık 3 sıfır olur.


7
ama 2 ^ 32 değil - (2 ^ 31) -1
Steve Folly

6

Objective-C'de (iOS ve OSX) şu makroları hatırlayın:

#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, numaranızı saklamak için 32 bitiniz olduğu anlamına gelir. En yüksek bit işaret bitidir, bu sayının pozitif mi yoksa negatif mi olduğunu gösterir. Yani pozitif ve negatif sayılar için 2 ^ 31 bitiniz var.

Sıfırın pozitif bir sayı olmasıyla (daha önce bahsedilen) mantıksal aralığını elde edersiniz

+2147483647 - -2147483648

Bunun küçük olduğunu düşünüyorsanız, Int64 kullanın:

+9223372036854775807 ila -9223372036854775808

Ve neden bu numarayı hatırlamak istiyorsun? Kodunuzda kullanmak için? Kodunuzda her zaman Int32.MaxValue veya Int32.MinValue kullanmalısınız, çünkü bunlar statik değerlerdir (.net çekirdeği içinde) ve dolayısıyla kullanımda kodla yeni bir int oluşturmaktan daha hızlıdır.

İfadem: eğer bu numarayı hafıza ile biliyorsanız .. sadece gösteriş yapıyorsunuz!


2
Modern bilgisayarların çoğu sayıları "ikiye iltifat" formatında saklar. En yüksek (en düşük değil) bit işarettir. İkili telafisi ile düzgün olan şey, -ve sayılarının CPU'nun doğal taşma kuralları tarafından ele alınmasıdır. yani 0xFF 8 bit -1, bunu 0x01 (+1) 'ye ekleyin ve 0x100 elde edersiniz. 8 ile 0x00 arasındaki bitleri kesin ve cevabınızı alın.
Tom Leys

5

Bunu hatırlayın: 21 IQ MADDE 47

Herhangi bir telefon pediyle de kodları çözülebilir veya bir kağıda kendiniz yazabilirsiniz.

"21 IQ ITEM 47" yi hatırlamak için, "Hitman: Codename 47'nin her biri kendi IQ ITEM'leri olan 21 misyonu vardı."

Veya "Her gün 21: 47'de dişleri temizlerim, çünkü yüksek IQ'um var ve ağzımdaki maddeleri sevmiyorum".


Ne demek istiyorsun de-encoded with any phone pad?
mcExchange
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.