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


当前回答

它是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。如果你不需要所有的数字,只需要前三位有效数字,那么每一步平方的计算都很简单。

其他回答

一般来说,你可以做一个简单的操作,它反映了Int32的本质,用1填充所有可用的位-这是你可以很容易地保存在你的内存中的东西。它在大多数语言中的工作方式基本相同,但我以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

对于unsigned Int32,将其设置为32而不是31个1。

但因为有一些更冒险的方法,我开始考虑公式,只是为了好玩…

公式1(如果没有给出运算符,则将数字连在一起)

a = 4 b = 8 巴/ a ab-1 接 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'

公式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'

什么意思?应该很容易记住它是2^32。 如果你想要一个规则来记住这个数字的值,一个方便的经验法则是在二进制和十进制之间转换:

2^10 ~ 1000

这意味着2^20 ~ 1,000,000

2^30 ~ 10亿

2^31的两倍大约是20亿,2^32的两倍是40亿。

这是对任何二进制数进行粗略估计的一种简单方法。二进制中的10个0变成十进制中的3个0。

大约是2.1 * 10^9。不需要知道确切的2^{31}- 1 = 2,147,483,647。

C

你可以在C语言中找到它:

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

给出(好吧,没有,)

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

你也可以用Java得到这个:

System.out.println(Integer.MAX_VALUE);

但是请记住,Java整数总是有符号的。

Python 2

Python有任意的精确整数。但在python2中,它们被映射为C整数。所以你可以这样做:

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

所以当整数大于2^31 -1时,Python会切换为long

它是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。如果你不需要所有的数字,只需要前三位有效数字,那么每一步平方的计算都很简单。

使用Java 9的REPL, jshell:

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

jshell> System.out.println(Integer.MAX_VALUE)
2147483647