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

15

记忆这些规则的最佳方法是:
21 (神奇数字!)
47 (只需记住)
48 (顺序! )
36 (21 + 15,两个神奇数字!)
再次47

此外,记住5对比记住10个数字更容易。


15
如果你恰好能够熟记ASCII表,并且不是MaxInt
!GH6G = 21 47 48 36 47

当我写这个答案的时候,我不知道GH6G有这么多的谷歌搜索结果,现在我自己也用了它 :-) - Mark Hurd

14

最简单的方法是看 std::numeric_limits< int >::max()

例如(来自MSDN),

// numeric_limits_max.cpp

#include <iostream>
#include <limits>

using namespace std;

int main() {
   cout << "The maximum value for type float is:  "
        << numeric_limits<float>::max( )
        << endl;
   cout << "The maximum value for type double is:  "
        << numeric_limits<double>::max( )
        << endl;
   cout << "The maximum value for type int is:  "
        << numeric_limits<int>::max( )
        << endl;
   cout << "The maximum value for type short int is:  "
        << numeric_limits<short int>::max( )
        << endl;
}

14
有趣的是,Int32.MaxValue比2,147,483,647还要多个字符。
但是再说一遍,我们有代码自动完成,
所以我想我们真正需要记住的只有"Int3M",在Visual Studio中只需要输入6个字符。
更新 出于某种原因,我被投了反对票。我唯一能想到的原因是他们没有理解我的第一句话。
"Int32.MaxValue"最多需要14个字符输入。 2,147,486,647需要10个或13个字符输入,取决于是否加上逗号。

2
但重要的不是你需要输入多少字符,而是如何记忆它。我相信 Iwannagohome298347829 更容易记忆。然而,没有理由给它打-1。 - glglgl
3
可以更小一些,只需编写自己的最大值代码片段,“imv” <tab> <tab> 也许可以? - BradleyDotNET
4
字符数不等于按键次数。对于这个可怜的 .Net 用户来说,它是in+.+ma+回车。 - Michael

10

请记住,2^(10*x)大约等于10^(3*x)——你可能已经在使用千字节/千字节等单位时习惯了这种情况。也就是说:

2^(10*x) ≈ 10^(3*x)

2^10 = 1024                ~= one thousand
2^20 = 1024^2 = 1048576    ~= one million
2^30 = 1024^3 = 1073741824 ~= one billion

由于 int 类型使用 31 位 (+ ~1 位符号位),只需将 2^30 乘以 2 即可得到大约 20 亿。对于使用 32 位的无符号 int,再次倍增可得到 40 亿。当然,随着数字越来越大,误差因素会变得更高,但你不需要记住精确值(如果需要,应该使用预定义的常量)。近似值足以发现某些可能接近溢出的情况。


10
离题:2的4次方等于4的2次方,因此指数运算是可交换的! - Adam Liss
10
@Pier-OlivierThibault 不对,我经常使用它!现在我需要找出为什么我的数学计算都出错了。可能是因为乘法错误的原因。好了,再见! - tckmn

9

这是我记住2,147,483,647的方法

转化为远古的大草原四分之一,优秀的三人组,被咒的四十七个七

2 - To
1 - A
4 - Far
7 - Savannah
4 - Quarter
8 - Optimus
3 - Trio
6 - Hexed
4 - Forty
7 - Septenary

7
你的意思是什么?应该很容易记住它是2的32次方。如果你想要一个记忆这个数字的规则,一个方便的二进制和十进制转换的经验法则是:
2的10次方约等于1000
这意味着2的20次方约等于1,000,000
2的30次方约等于1,000,000,000
将其翻倍(2的31次方)大约是20亿,再将其翻倍(2的32次方)就是40亿。
这是一种粗略估算任何二进制数的简单方法。二进制中有10个“0”在十进制中变成了3个“0”。

7
不是2的32次方,而是2的31次方减1。 - Steve Folly

6
在Objective-C(iOS和OSX)中,只需记住这些宏:
#define INT8_MAX         127
#define INT16_MAX        32767
#define INT32_MAX        2147483647
#define INT64_MAX        9223372036854775807LL

#define UINT8_MAX         255
#define UINT16_MAX        65535
#define UINT32_MAX        4294967295U
#define UINT64_MAX        18446744073709551615ULL

5
请记住: 21 IQ ITEM 47
可以用任何电话键盘解码,或者你可以在纸上自己写下来。
为了记住“21 IQ ITEM 47”,我会选择“Hitman:Codename 47有21个任务,每个任务本身都是IQ ITEM”。
或者“我每天晚上21:47刷牙,因为我智商高,不喜欢嘴里有东西”。

“de-encoded with any phone pad”是什么意思? - mcExchange

5

Int32表示你有32位可用于存储数字。最高位是符号位,这表示数字是正数还是负数。因此,你有2^31位用于正数和负数。

零被视为正数,因此你得到的逻辑范围是:

+2147483647到-2147483648

如果你认为这太小了,可以使用Int64:

+9223372036854775807到-9223372036854775808

你为什么要记住这个数字?用于代码中吗?在代码中,你应该始终使用Int32.MaxValue或Int32.MinValue,因为它们是静态值(在.net core中),因此比使用代码创建新整数更快。

我的说法是:如果你能记住这个数字,那只是在炫耀!


2
大多数现代计算机使用“二进制补码”格式存储数字。最高(不是最低)位是符号位。二进制补码的巧妙之处在于,CPU会通过自然溢出规则处理负数。例如,0xFF表示8位-1,再加上0x01(+1),得到0x100。将8位以上的位截断为0x00,您就得到了答案。 - Tom Leys

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