it-swarm-tr.com

Bir int32 için maksimum değer nedir?

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

1342
Flinkman

2,147,483,647. Ezberlemenin en kolay yolu bir dövme.

4882
Ben Hoffstein

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

475
Adrian Clark

Değerin 10 tabanında hatırlamakta zor olduğunu düşünüyorsanız, 2 tabanını deneyin: 111111111111111111111111111111111

422
Curd

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

280
WildJoe

pi numarasının tamamını hatırlayabiliyorsanız, aradığınız sayı Pi'nin ondalık basamağının 1.867.996.680 ile 1.867.996.689 arasında olduğu 

2147483647 nolu sayısal dize, Pi'nin 1.867.996.680 basamağında görünür. 3.14 ...... 861812218099364523462147483647 10527835665425671614 ...

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

268

Tek bir büyük sayı olarak düşünmek yerine, parçalara ayırmayı ve ilişkili fikirler aramayı deneyin.

  • 2 maksimum bilardo tatili (maksimum mola 147)
  • 4 yıl (48 ay)
  • 3 yıl (36 ay)
  • 4 yıl (48 ay)

Yukarıdakiler en büyük negatif sayı için geçerlidir; Olumlu olan bu eksi bir.

Belki de yukarıdaki çöküntü sizin için artık unutulmaz olacak (bu çok heyecan verici değil!), Ama umarım ki bazı fikirlerle karşılaşabilirsiniz!

161
Luke Bennett

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

En büyük pozitif (32 bit) değer: 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
140
Aaren Cordova

Neyse, bu regex'i alın (dizginin, Int32.MaxValue değerinden daha büyük olmayan ondalık biçimde 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ırlamana yardımcı olur.

69
Chizh

Bu şekilde hatırladım 2147483647:

  • 214 - Çünkü 2.14 yaklaşık olarak 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'niz var.

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

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

Dolayısıyla, 2 ^ 31 (işaretli int), 2 ^ 30 (yaklaşık 1 milyar) çarpı 2 ^ 1 (2) veya yaklaşık 2 milyardır. Ve 2 ^ 32, 2 ^ 30 * 2 ^ 2 ya da yaklaşık 4 milyardır. Bu yaklaşım yöntemi, yaklaşık 2 ^ 64'e kadar (hatasın yaklaşık% 15'e ulaştığı) bile yeterince doğrudur.

Kesin bir cevaba ihtiyacınız olursa, o zaman bir hesap makinesi açmalısınız.

Kullanışlı Word-uyumlu kapasite yaklaşımları:

  • 2 ^ 16 ~ = 64 bin // uint16
  • 2 ^ 32 ~ = 4 milyar // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 quintillion (diğer bir deyişle 16 milyar milyar veya 16 milyon trill) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 quintillion quintillion (diğer bir deyişle 256 trilyon trilyon) // IPv6, GUID
56
Wedge

Sadece iyi bir hesap makinesi alın ve hex modunda "7FFFFFFF" yazın, ardından ondalık girin.

2147483647.

44
darron

Bu 2.1 * 10^9 hakkında. 2^{31} - 1 = 2,147,483,647 öğesinin tam olarak ne olduğunu bilmenize gerek yok.

C

C de böyle 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 (peki, , 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'da rasgele kesinlikli tamsayılar vardır. Ancak Python 2'de, C tam sayılarına eşlenirler. Yani bunu yapabilirsiniz:

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

Böylece Python, tamsayı 2^31 -1'dan büyük olduğunda long öğesine geçer.

34
Martin Thoma

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

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

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 sık sık 18'e kadar ikisinin güçlerini kullandım, ancak 2 ** 31 ezberlemekten bile rahatsız olmadım. Gerektiği gibi hesaplamak, sabit kullanmak ya da 2G olarak tahmin etmek çok kolaydır.

33
Mark Ransom

32 bit, işaret için bir tane, 31 bit bilgi:

2^31 - 1 = 2147483647

Neden -1?
Zira ilk sıfıra sıfır olduğu için en büyüğü count eksidir.

cantfindaname88 için EDIT

Sayı 2 ^ 31'dir, ancak en büyük değeri 2147483648 (2 ^ 31) olamaz, çünkü 0'dan 1 sayılır.

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

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

2^2 - 1 = 3

3 bitli olası tüm 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
31
Aerospace

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

Çözüm 2,147,483,647

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

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

29
Sarien

Bu noktada en kolay anımsatıcının "stackoverflow.com" yazması olduğunu söyleyebilirim. TAB Chrome'da "maksimum int32".

Bir yerde bir özyineleme -> yığın taşması şakası var. Ben sadece o inek değilim.

28

Şakalar dışında, gerçekten yararlı bir hafıza kuralı arıyorsanız, her zaman büyük sayıları hatırlamak için kullandığım bir tane var.

Numaranızı 3-4 basamaktan parçalara ayırmanız ve cep telefonu klavyenizdeki çıkıntıyı kullanarak bunları görsel olarak hatırlamanız gerekir. Bir fotoğrafta göstermek daha kolay:

 enter image description here

Gördüğünüz gibi, bundan sonra sadece 3 şekli hatırlamanız gerekiyor, bunlardan 2'si Tetris L'ye benziyor ve biri kene benziyor. Bu kesinlikle 10 basamaklı bir sayıyı ezberlemekten daha kolaydır.

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

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

Herhangi bir önemli numarayı kolayca hatırlamak için bu tekniği kullanabilirsiniz (örneğin, 16 basamaklı kredi kartı numaramı vb. Hatırladım).

21
Ivan Yurchenko

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

Max işaretsiz değerler

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

İmzalı değerler, maksimum imzalı değer olarak 7F kullanılarak

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

İmzalı değerler, maksimum imzalanan 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ık rakam tam olarak 4 bittir. Ayrıca, birçok derleyici hex'i ikilileri desteklediğinden daha iyi destekler. 

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

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

0x7FFF + 0x0001 = 0x8000, bu nedenle kaybınız yalnızca bir sayıdır, bu nedenle 0x7F kullanarak ... genellikle 32 bit veya daha fazlasını kullanmaya başladığınızda, daha güvenilir bir kod için kötü bir işlem olmaz

21
Joe Plante

Öncelikle 47 kez iki kere yazın, ( Agent 47 , sağ?) Gibi boşlukları gösterin, istediğiniz gibi boşluk bırakın (her çizgi bir basamak için bir boşluktur. İlk 2 yuva, sonra 4)

--47----47

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

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

Daha sonra 12 ile 3 ile çarpın (7 olan Agent 47'nin sayısının ikinci basamağını yapmak için 7 - 4 = 3 gerekir) ve sonucu ilk 2 çiftin sağındaki son çift yarığına koyun

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

Sonunda rakamları, en sağdaki rakamdan başlayarak elinizden tek tek sürükleyin (bu durumda 2) ve aldığınız ilk boş yuvaya yerleştirin.

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

İşte aldın! Negatif limit için, bunu pozitif limitten daha fazla mutlak değer olarak düşünebilirsiniz.

Birkaç kez çalışın, asılmaya başlasın!

20

2GB

(cevaplar için asgari bir uzunluk var mı?)

19
Rune

Eğer ASCII tablonuzu biliyorsanız kapalı olarak değil, MaxInt değil:
!GH6G = 21 47 48 36 47

16
Mark Hurd

Ezberlemek için en iyi kural şudur:
21 (sihirli sayı!)
47 (sadece hatırla)
48 (sıralı!)
36 (21 + 15, ikisi de büyüler!)
47 tekrar

Ayrıca 5 haneyi 10 haneden hatırlamak daha kolaydır.

16
MacGyver

.NET varsaymak -

Console.WriteLine(Int32.MaxValue);
15
Kev

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

Fakat yine de, kod tamamlamamız var.

Sanırım gerçekten ezberlemek zorunda olduğumuz tek şey Int3<period>M<enter>, görsel stüdyoya yazılacak sadece 6 karakter.

UPDATEBazı nedenlerden dolayı düşürüldüm. Düşünebilmemin tek nedeni benim ilk açıklamamı anlamadıkları.

"Int32.MaxValue", yazmanız için en fazla 14 karakter alır. .. 2.147.486.647, virgül koyup koymadığınıza bağlı olarak yazmanız için 10 veya 13 karakter alır.

15
NotMe

Hatırlamanın en kolay yolu, std::numeric_limits< int >::max() dosyasına bakmaktır.

Ö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
Seq

Sadece 2 ^ (10 * x) değerinin yaklaşık 10 ^ (3 * x) olduğunu unutmayın - muhtemelen buna zaten kilobayt/kibibitler vb. İle alışmışsınızdır.

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 elde etmek için sadece 2 ^ 30'u ikiye katlayın. 32 bit kullanan bir imzasız int için, 4 milyar daha ikiye katlayın. Hata faktörü elbette gittikçe büyür, ancak ezberlenmiş tam değere ihtiyacınız yoktur (İhtiyacınız olursa, bunun için önceden tanımlanmış bir sabit kullanmanız gerekir). Yaklaşık değer, bir şeyin taşma tehlikesine tehlikeli olabileceği durumlar için yeterlidir.

11
Brian

bu şekilde hatırlıyorum bunu 2,147,483,647

Çok uzak savana çeyrek optimus trio kırk septenary hexed

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

Ne demek istiyorsun? 2 ^ 32 ..__ olduğunu hatırlamak yeterince kolay olmalı .. Bu sayının değerini ezberlemek için bir kural 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

bu da 2 ^ 20 ~ 1,000,000 demektir.

ve 2 ^ 30 ~ 1,000,000,000

Bunun iki katı kadar (2 ^ 31) 2 milyar dolar, iki katına (2 ^ 32) 4 milyar dolar.

Herhangi bir ikili sayı hakkında kabaca bir tahminde bulunmak için kolay bir yol. İkili sayıdaki 10 sıfır, ondalık sayıdaki 3 sıfır olur.

7
jalf

Objective-C (iOS ve OSX) 'te şu makroları unutmayı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
6
juniperi

Bir fizikçi olarak sadece 2 milyar (yarı şaka) turuna giderdim. Hatırlaması kolay!

6
bersling

Int32, numaranızı saklamak için 32 bitiniz olduğunu gösterir. En yüksek bit işaret bitidir, bu sayının pozitif mi yoksa negatif mi olduğunu gösterir. Bu yüzden pozitif ve negatif sayılar için 2 ^ 31 bit var. 

Sıfır pozitif bir sayı ile (daha önce bahsedilen) mantıksal aralığı olsun

+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ızadan biliyorsan .. sadece gösteriş yapıyorsun!

5
Andre Haverdings

Bunu hatırlayın: 21 IQ ÖĞE 47

Herhangi bir telefon pediyle deşifre edilebilir veya bir kağıda kendiniz yazabilirsiniz.

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

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

5
soprof

Yolda Groovy ile:

groovy -e " println Integer.MAX_VALUE "

(Groovy, Java bağlamında hızlı başvuru için son derece kullanışlıdır.)

4
Michael Easter

Herhangi bir türün maksimum değerini asla unutmamak için:

32 bite sahipse, mümkün olan en büyük değer 1 numaralı 32 bittir:

 enter image description here

Sonuç, ondalık olarak 4294967295 olur:

 enter image description here

Ancak, negatif sayıların temsili olduğu gibi, 4294967295'i 2'ye bölün ve 2147483647'yi alın.

Bu nedenle, 32 bit bir tam sayı -2147483647 ila 2147483647'yi temsil edebilir

2

Bu şekilde hatırlıyorum ...
Onaltılı, bir basamak dört bitleri temsil eder, bu yüzden 4 * 8 = 32, bu nedenle işaretli maksimum 32 bit int:

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

Python'da deneyin:

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

2147483647, ancak bunu ezberlemenize gerek yok. Numaranızın kaç rakamının olabileceğine bağlıdır. Bazen bunun yerine kısa int kullanabilirsiniz.

Bir taşma programınız için yıkıcı olsa da, sınırsız boyutta bir kitaplık kullanmanız gerekebilir (yine de daha yavaş olacaktır).

2
theo2003

C # 'da üretim ortamınızda yararlanabileceğiniz birkaç dahi yöntem yaptım:

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

İşte hatırlamanız gerekenler:

  • 2 milyar.
  • Sonraki üç üçüz de şu şekilde artıyor: 100s, 400s, 600s
  • İlk ve son üçlünün kendilerine 3 eklenmesi gerekiyor, böylece onlara 50 değerine yuvarlanırlar (örneğin 147 + 3 = 150 & 647 + 3 = 650)
  • İkinci üçlünün, 80'e yuvarlaması için 3'dan çıkarılması gerekir (örneğin, 483 - 3 = 480).

Dolayısıyla, 2, 147, 483, 647

2
G.Rassovsky

Bu sayıya ulaşmanın başka bir yolu:

  1. Maksimum teorik limitine kadar 2048 oynayın. Resimde: 15, USHRT_MAX'tan önce hareket ediyor.
  2. Sonucu kare. UINT_MAX hakkında.
  3. INT_MAX almak için 2 ve - 1'e bölün.

 enter image description here

2
Uri

Java 9’un REPL, jshell : kullanımı

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

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

Hayal gücünü kullan!

Gözlerini kapat ve engeline rağmen Çin'deki en zengin ve güçlü çoban olan yaşlı tek bacaklı Çinli çiftçi Wang'ı gör. Ailesi kendisinden, karısı, dört oğlu ve çoban köpeği Alice'ten oluşur. Bir gün hepsini, milyonlarca koyunu ile kaplı sonsuz çim alanda topladı ve şöyle dedi:

Ben yaşlı ve yorgunum. Ben de servetimi oğullarım arasında eşit olarak bölmeye karar verdim.

Bütün koyunları işaret etti:

Bunlar, çocuklarım, hepsi senin. Her birinize 123456789 beyaz koyun, 10101010 kara koyun, 203040 benekli koyun, 444888 kuzu ve 12000 koç geliyor. Kendim için tutacağım köpek. Ben de öyle dedim.

Karısının omzuna ve gülümsemesine yaslandı.

Yani ... arkadaşım, bu resmi hayal et! Görüntüyü olabildiğince canlı ve gerçek! Gözlerinin önünde yaşa!

Sonra diz çök ve ... saymaya başla! Bu alandaki bacak sayısı bir int32 için maksimum değerdir.

Tarif edilen yöntemin bilinen iki kusuru vardır:

  1. İnsanın hayal gücü sınır tanımıyor ... bu yüzden siz bacakları sayarken daha fazla koyun oluşturmadan kendinizin kısıtlanması ve o alandaki tam koyun sayısını hayal etmek zor.
  2. İnsanlar tembeldir ... bu yüzden birçok insan sadece koyunları saymaya çalışır ve bacakları saymak yerine dörde çarpmaya çalışır ama ... tahmin et ne - uyurlar.
1
StoYan

İkili olarak bir Int32'nin maksimum değerini 111111111111111111111111111111111 .__ olduğunu bulabilirsiniz.

1
trinalbadger587
  1. 31 kuşak tavşan yetiştir.
  2. 1-tavşan güveç yapmak. *
  3. Kalan tavşanları say.

* Tavşan yahnisini nasıl yaparsınız? Bilmiyorum, internete bak.

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

Bir derleyici yine de onu optimize etmelidir.

1 << 31 - 1 yerine tercih ederim 

0x7fffffff çünkü saymanız gerekmez. fs

unsigned( pow( 2, 31 ) ) - 1 çünkü <math.h>'ye ihtiyacınız yok

0
lllllllllll

2 ^ 31 - 1 (32 bit, biri işaret için kullanılır).

Yaklaşık bir değer istiyorsanız, 2 ^ 10 = 1024 ~ 10 ^ 3, yani 2 ^ 31 ~ 2 * 10 ^ 9 kullanın. Elle kesin bir değer hesaplamak istiyorsanız, 2 ^ 32 = 2 ^ (2 ^ 5) değerine ulaşmak için kareyi kullanarak üs kullanın ve ikiye bölün. 2 ^ 32 almak için sadece beş kez kare gerekir:

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

bunu ikiye bölmek ve birini çıkarmak size 2147483647 değerini verir. Tüm rakamlara ihtiyacınız yoksa, ancak sadece söylemek istediğiniz ilk üç basamağı varsa, her kare adımındaki hesaplamalar çok kolaydır.

0
saolof

Her zaman sadece İngilizce alfabesiyle mümkün olan tüm metinleri içeren Babel Kütüphanesine bakarım.

Belirli bir bölümdeki belirli bir bölümdeki belirli kitabın belirli sayfasına bir link: https://libraryofbabel.info/bookmark.cgi?max_int32

0
Thediabloman

C 'de INT32_MAX..__' den sonra #include <stdint.h> kullanın, C++ 'da INT32_MAX' dan sonra #include <cstdint> kullanın.

Veya platforma özgü boyut için INT_MAX veya UINT32_MAX için UINT_MAX veya unsigned int. Bkz. http://www.cplusplus.com/reference/cstdint/ ve http://www.cplusplus.com/reference/climits/ .

Veya sizeof(int).

0
Reed Hedges

Genel olarak, bir Int32'nin doğasını yansıtan basit bir işlem yapabilir, mevcut tüm bitleri 1'lerle doldurun - Bu, hafızanızda kolayca tutabileceğiniz bir şeydir. Temelde çoğu dilde aynı şekilde çalışır, ancak örnek için Python ile gidiyorum:

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

İmzasız Int32'ler için, 31 1 yerine 32 yapın.

Ancak birkaç maceraperest yaklaşım yayınlandığından, sadece eğlenmek için formüller düşünmeye başladım ...

Formül 1 (Operatör verilmezse sayılar birleştirilir)

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

Python hızlı kontrol

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'

Formül 2

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

Python hızlı kontrol

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

Hatırlaması çok kolaydır. Onaltılık bir basamakta bir rakam 4 bittir. Bu nedenle, imzasız int için, 10 tabanındaki değeri almak için bir Python veya Ruby Shell'e 0x ve 8 fs (0xffffffff) yazın. İmzalı değere ihtiyacınız varsa, en yüksek bitin işaret olarak kullanıldığını unutmayın. Yani onu dışarıda bırakmak zorundasın. Sadece alt 3 bitin 1 ve 4'üncü bitin 0'a eşit olduğunu hatırlamanız gerekir, bu nedenle bir Python veya Ruby Shell'e 0x7fffffff yazın. Ayrıca hatırlamak sizin için daha kolaysa, 0x100000000 - 1 ve 0x80000000 - 1 yazabilirsiniz.

0
panzi

"Büyük bir tamsayı hatırlanmadıysa, bu anımsatıcıyı hatırlarsınız."

Şimdi her bir Word'deki harfleri sayın.

0
Matt Malone