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


当前回答

它是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。最简单的记忆方法就是纹身。

它是10位数字,所以假装它是一个电话号码(假设你在美国)。214-748-3647。我不建议调用它。

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

0xFFFFFFFF >> 1 # => 2147483647

对于整数,最简单的方法是使用十六进制,前提是没有类似Int.maxInt()的东西。原因如下:

最大无符号值

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

有符号值,使用7F作为最大有符号值

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

带符号的值,使用80作为最大带符号的值

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

这是如何工作的呢?这与二进制策略非常相似,每个十六进制数字恰好是4位。而且,许多编译器对十六进制的支持要比对二进制的支持好得多。

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

所以7F等于01111111 / 7FFF等于0111111111111111。此外,如果你用这个来表示“高得离谱的常数”,7F…是安全的十六进制,但它很容易尝试7F和80,只是打印到你的屏幕上,看看是哪一个。

0x7FFF + 0x0001 = 0x8000,因此您的损失只有一个数字,因此使用0x7F…对于更可靠的代码来说,这通常是一个不错的折衷,特别是当您开始使用32位或更多位的代码时

2GB

(回答有最短长度限制吗?)