int32的最大值是多少?

1378
我总是记不住那个数字,我需要一个记忆规则。

48
无符号数:2³²-1 = 4·1024³-1;带符号数:-2³¹ .. +2³¹-1,因为符号位是最高位。只需要学会2⁰=1到2¹⁰=1024并结合使用。1024等于1千,1024²等于1兆,1024³等于1吉。 - comonad
31
我一般记得每3位二进制数对应一个十进制数字左右,这让我能够大概估算:32位二进制数约等于10个十进制数字。 - Barmar
8
如果你学会至少辨认出这些数字的类型,它肯定能帮助调试。 - Dunaril
72
如果磁盘空间已满,删除所有的兆字节将会实现归档。(2个字母、1个字母、4个字母、7个字母、4个字母、8个字母、3个字母、6个字母、4个字母、7个字母) - UltraCommit
8
当int32不足以应对的情况:http://www.bbc.com/news/world-asia-30288542 - Balazs Nemeth
显示剩余13条评论
45个回答

5062

是 2,147,483,647。最简单的记忆方法是通过纹身。


83
我的记忆法:2的10次方非常接近1000,因此2的30次方就是1000的3次方或约为10亿。32位中有一位用于表示符号,因此最大值实际上只有2的31次方,约为2倍于2的30次方的数值,即20亿。 - 16807
164
2147483647没有逗号。 - Vern D.
20
在Java中,只需使用Integer.MAX_VALUE即可。 - Tim
127
2147483647可以用十六进制表示为0x7FFFFFFF,如果想记住它,只需使用十六进制即可。 - roottraveller
3
简单公式 (2 << 31) - 1 - xudifsd
显示剩余8条评论

493

我能想到的最正确的答案是 Int32.MaxValue


18
在这个存在之前,我在所有的项目中都会使用 #define INT32_MIN 和 INT32_MAX。 - WildJoe
3
当你在编程时:99%的情况下是需要这样做的。但你可能会想知道,在计划编程方法或处理数据时,也有像大约20亿次这样的操作,尽管它是一个非常大的数字。 :) - Andre Figueiredo
1
这个属性可能是一个好的建议,除了提到正确的数字之外。然而,我不喜欢这个答案,因为它只提到了一种不可移植的确定值的方式,并且也没有说明这适用于哪些编程语言... - mozzbozz
没有冒犯之意,但是你能在脑海中打印出“Int32.MaxValue”的值吗?;-) 尽管这个问题听起来很荒谬,但它询问的是记住这个数字的方法。 - Sнаđошƒаӽ
那不是最大值,那是一个常量的名称。 - Mariano Dupont
显示剩余4条评论

439

如果你认为在十进制下这个值过于难记,可以尝试在二进制下表示: 1111111111111111111111111111111


145
@Nick Whaley:不,1111111111111111111111111111111 是正的。11111111111111111111111111111111 才是负的 :-) - Curd
58
Base 16更容易,7FFFFFFF。 - Nelson Galdeman Graziano
34
如果将 11111111111111111111111111111111 作为二进制数,则仍为正数(在二进制中表示负数的例子是 -1)。只有当它表示一个32位2补数时,这个比特序列才是负数 :) - BlueRaja - Danny Pflughoeft
143
最容易记住的将是基础为 2,147,483,647。然后你只需要记住 1。 - big_tommy_7bb
82
@tim_barber_7BB 实际上,是10。 - fscheidl
显示剩余6条评论

315

如果你能记住整个圆周率,那么你要找的数字位于Pi小数位的第1,867,996,680至1,867,996,689个位置。

数字串2147483647出现在Pi的第1,867,996,680个小数位。3.14......86181221809936452346214748364710527835665425671614...

来源:http://www.subidiom.com/pi/


30
你知道吗,当我开始阅读你的回答时,我期望得到一些实际的东西,比如第20位数字。 - JqueryToAddNumbers
95
这看起来很酷。你有没有另一个记忆规则来记住 1,867,996,680?我发现很难记住从哪个索引开始查找... - Alderath
10
如果你能记住整个派数列……” - 不,你不可能,因为它是无理数,就像这个问答中可能有一两个帖子一样。8-D - SlySven
10
我通常记得sqrt(2)中从第380,630,713位数字开始的10个小数是什么:@Alderath - htd
2
@Alderath:数字字符串1867996680出现在2的平方根的第380,630,713位小数处。 - Yair Halberstadt
显示剩余6条评论

291

这是10位数字,就像一个电话号码一样(假设您在美国)。214-748-3647。我不建议拨打它。


13
提到把这个号码记作电话号码,似乎有些电话骚扰者在使用它:http://mrnumber.com/1-214-748-3647。 - Steven
8
达拉斯没有“748”交换机,这个号码是虚假的。- 来自shambleh链接的页面。 - Tarnay Kálmán
104
@Steven 我不认为他们是垃圾邮件发送者,只是在 MySQL 中意外将电话号码存储为 INT 而非 VARCHAR 的人。 - Zarel
8
试着打电话,响了几次后就变成了错误的忙音。=( - Krythic

172

不要将其视为一个庞大的数字,尝试将其分解并寻找相关联的想法,例如:

  • 2个最高台球破纪录(最高破纪录是147)
  • 4年(48个月)
  • 3年(36个月)
  • 4年(48个月)

以上适用于最大的负数; 正数是那个减一。

也许上述的分解对您来说并没有更加容易记忆(它几乎没有什么激动人心的内容!),但希望您能够想出一些更好的想法!


99
那是我见过的最复杂的记忆辅助工具之一。令人印象深刻。 - Ben Hoffstein
9
很好,像德伦·布朗这样的人实际上提倡这种方法——将数字拆分成某个随意但比一堆数字更容易记忆的东西: http://www.channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/memory.html - Luke Bennett
19
我有一个更好的记忆方法:你只需要记住2和31,因为显然正好是2的31次方!哦,等等... - Tamas Czinege
28
@DrJokepu,我不确定运算符优先级...这是指2^(31!)还是(2^31)! - Alderath
1
@Lucio 注意,我的回答首先涉及以48结尾的最大负数,而不是47。 - Luke Bennett
显示剩余4条评论

144

32位最大的负值为:-2147483648
(1 << 31)

32位最大的正值为:2147483647
~(1 << 31)

助记词:"喝醉了又犯病"

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
世界上最难记的记忆口诀。如果你能记住0118 999 88199 9119 752...3,那么你就能记住这个。 - BenM
11
我认为实际上结尾是7253。 - Tim Tisdall
21
不行。这里的饮酒年龄是18岁...看来我不能使用这个记忆口诀了,我的生活毁了。 - Joffrey
4
他们曾经说Stack Overflow永远不会有趣,只会是一个问答网站,我通常会指向这个答案。这个东西只能由天才头脑创造,我的意思是这真的是艺术。 - Mohd Abdul Mujib
5
最大的32位有符号整数是-2,147,483,648,而最大的64位有符号整数是-9,223,372,036,854,775,808。而最大的负32位整数或64位整数是-1,不论是哪一种情况。 - Fred Mitchell
显示剩余2条评论

75

无论如何,使用以下正则表达式(它可以确定字符串是否包含非负十进制整数且不大于Int32.MaxValue)

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

也许这会对你有所帮助。


12
这听起来对我来说更容易和有趣。实际上,这比“2147483647”要容易得多。这将对OP非常有帮助。 - Sнаđошƒаӽ

61

这就是我记得 2147483647 的方式:

  • 214 - 因为2.14大约等于π-1
  • 48 = 6*8
  • 64 = 8*8

将它们横向排列:

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

现在你有了2147483647。

希望这至少有点帮助。


3
不错!我认为“214规则”应该是π-1。此外,该面罩显示的数字是68而不是64。=)对于像我这样的航空迷来说,将737值与波音的中型客机喷气式飞机联系在一起应该很容易记住。 - user1222021
你可以更进一步。去掉小数点,比较π和2^31-1。在相同的位置上,你会得到141和147,所以最后一位数字变成了7。然后是592和483,它们都只相差一位数字。最后是643和647,又是那个变成7的规律。 - Peter Cooper
@PeterCooper 尽管圆周率的小数部分以1415926_5_35开头(注意是5,不是4) - Moberg
15
我的记忆方法是取4294967296(容易记住的数字),然后除以2。 - M.M

55
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(有符号整数最大值)是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万亿(又称16十亿亿或16百万万亿)// uint64,“bigint”
  • 2^128 ~= 256万亿亿亿(又称256万亿亿亿亿)// IPv6,GUID

76
这是硬盘制造商所说的话。 - Scott Stafford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接