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个回答

0
一般来说,您可以执行一个简单的操作,反映了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

对于无符号Int32,将其变为32个1而不是31个。

但由于有一些更冒险的方法被发布,我开始考虑公式,只是为了好玩...

公式1(如果没有给出运算符,则连接数字)

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

Python快速检查

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 快速检查

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

0

0

如果你无法记住一个巨大的整数,那么你可以记住这个助记符。

现在统计每个单词中的字母数。


-1

它是2的31次方-1(32位,其中一位用于符号)。

如果您想要一个近似值,请使用2的10次方= 1024≈10的3次方,因此2的31次方≈2*10的9次方。如果您想手动计算精确值,请使用指数平方法得到2的32次方= 2(2的5次方),然后除以二。只需要平方五次即可得到2的32次方:

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即可得到2,147,483,647。如果您不需要所有数字,而只想要前三个有效数字,则每个平方步骤的计算非常容易。


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

编译器应该会进行优化。

我更喜欢 1 << 31 - 1 而不是

0x7fffffff 因为你不需要数 fs

unsigned( pow( 2, 31 ) ) - 1 因为你不需要 <math.h>


你可以使用下划线来提高某些语言的可读性。据我所知,Java和Swift支持这种方式,也许还有其他语言。0x7FFF_FFFF - Alexander

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