int32的最大值是多少?
我永远不记得这个号码。我需要一个记忆规则。
解决方案
好吧,它具有32位,因此可以存储2 ^ 32个不同的值。其中一半是负面的。
解决方案是2,147,483,647
最低的是2,147,483,648.
(请注意,还有一个负值。)
是2,147,483,647. 记住它的最简单方法是通过纹身。
假设.NET-
Console.WriteLine(Int32.MaxValue);
我能想到的最正确的答案是Int32.MaxValue。
它是10位数字,所以假装它是电话号码(假设我们在美国)。 214-748-3647. 我不建议调用它。
与其将其视为一个大数字,不如将其分解并寻找相关的想法,例如:
- 2个最大的斯诺克台球休息时间(最大间隔为147个)
- 4年(48个月)
- 3年(36个月)
- 4年(48个月)
以上适用于最大负数;积极的是减一。
也许上面的故障对我们来说不再令人难忘了(这很难令人激动!),但希望我们能提出一些想法!
只需带上任何像样的计算器,然后在十六进制模式下键入" 7FFFFFFF",然后切换到十进制即可。
2147483647.
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(有符号int max)是2 ^ 30(约10亿)乘以2 ^ 1(2)或者约20亿。 2 ^ 32是2 ^ 30 * 2 ^ 2或者大约40亿。这种近似方法即使在2 ^ 64左右(误差增长到约15%)时也足够准确。
如果我们需要确切的答案,则应使用计算器。
方便的字对齐容量近似值:
- 2 ^ 16〜=六万四千// // uint16
- 2 ^ 32〜= 40亿// // uint32,IPv4,unixtime
- 2 ^ 64〜= 16兆(即160亿亿或者1600亿亿)// uint64," bigint"
- 2 ^ 128〜= 256亿个quintillion(aka 256万亿兆兆),// IPv6,GUID
2GB
(答案是否有最小长度?)
只要记住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加倍即可获得约20亿。对于使用32位的无符号整数,请再次翻倍以达到40亿。当然,误差因子越大,误差因子就越高,但是我们不需要存储确切的值(如果需要,则无论如何都应使用预定义的常数)。近似值足够好,足以提醒我们可能危险地接近溢出。
随着Groovy的发展:
groovy -e " println Integer.MAX_VALUE "
(对于Java上下文中的快速参考,Groovy极为有用。)
你什么意思?应该很容易记住它是2 ^ 32.
如果我们想使用一条规则来记住该数字的值,通常可以使用方便的经验法则来在二进制和十进制之间进行转换:
2 ^ 10〜1000
这意味着2 ^ 20〜1,000,000
和2 ^ 30〜1,000,000,000
将(2 ^ 31)翻倍大约为20亿,再翻一番(2 ^ 32)为40亿。
这是对任何二进制数进行粗略估计的一种简便方法。二进制的10个零变为十进制的3个零。
最容易记住的方法是查看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; }
Int32表示我们有32位可用于存储号码。最高位是符号位,它指示数字是正数还是负数。因此,我们有2 ^ 31位的正数和负数。
以零为正数,我们将获得(前面提到的)的逻辑范围
+2147483647至-2147483648
如果我们认为这太小,请使用Int64:
+9223372036854775807至-9223372036854775808
以及为什么你想记住这个数字呢?要在代码中使用?我们应该始终在代码中使用Int32.MaxValue或者Int32.MinValue,因为它们是静态值(在.net核心内),因此比使用代码创建新的int更快地使用。
我的说法:如果通过记忆知道这个数字,那么我们就是在炫耀!
无论如何,请使用此正则表达式(它确定字符串是否包含十进制形式的非负整数,并且该整数也不大于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]
也许它将记住。
有趣的是,Int32.MaxValue的字符数超过2,147,486,647.
但是话又说回来,我们确实有代码补全,
因此,我想我们真正需要记住的就是Int3 <period> M <enter>,在Visual Studio中只能键入6个字符。
更新
由于某种原因,我被否决了。我能想到的唯一原因是他们不理解我的第一句话。
" Int32.MaxValue"最多需要输入14个字符。
2,147,486,647输入10个或者13个字符,具体取决于我们是否输入逗号。
如果我们认为以10为基数很难记住该值,请尝试以2为基数:
1111111111111111111111111111111111