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

4

我在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;
}

1
我在考虑一种方法,它可以猜测数万亿个随机整数,并返回最高的那个。 - Slothario

4

使用Groovy:

groovy -e " println Integer.MAX_VALUE "

(Groovy在Java环境中非常有用,可以快速进行参考。)

4
只需记住它是第八个梅森素数。
如果这太难了,它也是仅有的四个已知双梅森素数中的第三个。
欧几里得-欧拉定理指出,每个偶完全数的形式为2^(n − 1) (2^n − 1),其中2^n − 1是一个质数。形式为2^n − 1的质数被称为梅森素数,并且要求n本身是质数。
我们知道INT32的长度当然是32位。根据通常接受的2的补码理解,有符号的INT32是32位 - 1位。
为了找到具有给定位数的二进制数的大小,我们通常将2提高到n的幂次方,再减去1,其中n等于位数。
因此,大小计算为2^(32 - 1) - 1 = 2^31 - 1。31是质数,如上所述,这种形式的质数是梅森素数。我们可以通过计数它们来证明它是第八个。有关详细信息,请询问欧拉或也许伯努利(他曾向他们写信)。
参见:https://books.google.ie/books?id=x7p4tCPPuXoC&printsec=frontcover&dq=9780883853283&hl=en&sa=X&ved=0ahUKEwilzbORuJLdAhUOiaYKHcsZD-EQ6AEIKTAA#v=onepage&q=9780883853283&f=false

你有相关的链接参考吗?(可以直接提供链接,无需搜索谷歌或维基百科...) - chivracq

4

2147483647

以下是需要记住的:

  • 它是20亿
  • 接下来的三个三位数组是递增的,如下所示:100s、400s、600s
  • 第一个和最后一个三位数组需要加上3,这样它们就会被舍入到50(例如,147 + 3 = 150 & 647 + 3 = 650)
  • 第二个三位数组需要减去3才能将其舍入到80(例如,483 - 3 = 480)

因此,2,147,483,647


2
这是我的理解...
在十六进制中,一个数字代表四个位,因此 4 * 8 = 32,所以有符号的 32 位整数的最大值为:
0xFFFFFFFF >> 1 # => 2147483647

这可能会起作用。我希望那个给你点踩的人能给你一个解释。 - Joe Plante
3
问题提问者想知道作为一个人如何记住这个数字(也就是它的十进制数位)。我不知道你怎么看,但是在我的脑子里解析十六进制然后进行位移操作并不是一种直观的方法。如果你要采用这种方法,也不妨直接计算 2^31-1。 - Mark Amery
我回答的问题是“int32的最大值是多少?”我理解你的观点@MarkAmery,但是将这行代码输入解释器或打印语句中是我记忆数字的方法。这也适用于其他大小的数据类型。感谢您的支持@JoePlante! - Sean Vikoren
没问题。在16位之后,我就停止了记忆,因为你总是可以查找。0xFFFFFFFF >> 1 在很多情况下都是正确的,因为如果你需要到64位,0xFFFFFFFFFFFFFFFF >> 1 也可以使用。0xFFFF >> 1 和 0xFF >> 1 也可以使用。我不确定这是否适用于带有有符号值的语言,但我仍然觉得它是可行的。 - Joe Plante

2
永远不要忘记任何类型的最大值:
如果它有32位,最大可能的值将是具有数字1的32位。

enter image description here

结果为4294967295,以十进制表示:

enter image description here

但是,由于还存在负数的表示方式,将4294967295除以2得到2147483647。
因此,32位整数能够表示-2147483647到2147483647。

你可以直接获取2的31次方(实际上这也是内存中的存储方式-1个用于标识正负的位和31个数字位),这将自动成为一半。并且对于零而言,需要减去一个数字(在您的情况下,您获得的是2147483647.5,而不是2147483647,因为您没有计算它)。 - ave

1

这很容易记住。在十六进制中,一个数字是4位。因此,对于无符号整数,将0x和8个f0xffffffff)写入Python或Ruby shell中,以获取十进制值。如果您需要有符号值,只需记住最高位用作符号。所以你必须把它留出来。你只需要记住,低3位为1且第4位为0的数字等于7,因此在Python或Ruby shell中写入0x7fffffff。如果更容易记忆,您也可以写0x100000000 - 10x80000000 - 1


1
你会发现在二进制中,Int32的最大值是1111111111111111111111111111111,但在十进制中,它是2147483647或2^31-1或Int32.MaxValue。

1
使用Java 9的REPL,jshell
$ jshell
|  Welcome to JShell -- Version 9-Debian

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

1
尝试在Python中:

>>> int('1' * 31, base=2)
2147483647

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