我总是记不住电话号码。我需要一个记忆规则。


当前回答

我在c#中做了几个天才的方法,你可以在你的生产环境中利用:

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^(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

2^31 (signed int max)等于2^30(约10亿)乘以2^1(2)也就是20亿。2^32等于2^30 * 2^2,大约是40亿。这种近似方法甚至可以精确到2^64左右(误差增长到15%左右)。

如果你需要一个确切的答案,那么你应该打开计算器。

方便的字对齐容量近似:

2^16 ~= 64千// uint16 2^32 ~= 40亿// uint32, IPv4, unixtime 2^64 ~= 16 quintillion(又名160亿billion或1600万trillion) // uint64, "bigint" 2^128 ~= 256quintillion quintillion(又名256trillion trillion万亿)// IPv6, GUID

随便找个计算器,在十六进制模式下输入“7FFFFFFF”,然后切换到十进制。

2147483647.

它是231−1(32位,其中1位用于符号)。

如果你想要一个近似值,使用210 = 1024≈103,所以231≈2*109。如果您想手动计算一个精确的值,可以使用平方的求幂来得到232 = 2(25),然后除以2。你只需要平方5次就可以得到232:

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

把这个除以2再减去1得到2147,483,647。如果你不需要所有的数字,只需要前三位有效数字,那么每一步平方的计算都很简单。

2147483647

以下是你需要记住的:

是20亿。 接下来的三个三胞胎是这样增加的:100秒,400秒,600秒 第一个和最后一个三联体需要加3,这样它们就会四舍五入到50(例如147 + 3 = 150 & 647 + 3 = 650) 第二个三联数需要减去3才能四舍五入到80(例如483 - 3 = 480)

因此是2,147,483,647

我是这样记得的…… 在十六进制中,一个数字代表4位,所以4 * 8 = 32,所以最大有符号的32位整型是:

0xFFFFFFFF >> 1 # => 2147483647