只需取任何一个像样的计算器,选择十六进制模式并输入“7FFFFFFF”,然后切换到十进制模式。
2147483647。
Int32.MaxValue
/numeric_limits<int32_t>::max()
。 - sehe这是关于 2.1 * 10^9
的内容。不需要知道准确的 2^{31} - 1 = 2,147,483,647
。
你可以在C语言中这样找到它:
#include <stdio.h>
#include <limits.h>
main() {
printf("max int:\t\t%i\n", INT_MAX);
printf("max unsigned int:\t%u\n", UINT_MAX);
}
,
)max int: 2,147,483,647
max unsigned int: 4,294,967,295
std::cout << std::numeric_limits<int>::max() << "\n";
std::cout << std::numeric_limits<unsigned int>::max() << "\n";
你也可以使用Java来实现这个功能:
System.out.println(Integer.MAX_VALUE);
请注意,Java整数始终带有符号。
Python具有任意精度的整数。但在Python 2中,它们被映射到C整数。因此,您可以执行以下操作:
import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L
当整数大于2^31 -1
时,Python会切换到long
。
这里有一个记住 2**31 的助记法,减去一就是最大的整数值。
a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9
Boys And Dogs Go Duck Hunting, Come Friday Ducks Hide
2 1 4 7 4 8 3 6 4 8
我经常使用2的幂次方,一直记得到18次方,但我甚至没有费心去记忆2**31。这个数太容易根据需要进行计算或使用常量,或者估算为2G。
我经常使用2的幂次方,一直记得到18次方,但我甚至没有费心去记忆2**31。这个数太容易根据需要进行计算或使用常量,或者估算为2G。
32位,其中1位用于符号,31位用于信息:
2^31 - 1 = 2147483647
为什么是-1?
因为第一个数是零,所以最大的数是计数减一。
针对cantfindaname88的修正
计数为2^31,但最大的数不能是2147483648(2^31),因为我们是从0开始计数,而不是1。
Rank 1 2 3 4 5 6 ... 2147483648
Number 0 1 2 3 4 5 ... 2147483647
只需要3位二进制位的另一个解释:1位用于符号,2位用于信息。
2^2 - 1 = 3
以下是3位二进制数可能的所有取值:(2^3 = 8个数值)
1: 100 ==> -4
2: 101 ==> -3
3: 110 ==> -2
4: 111 ==> -1
5: 000 ==> 0
6: 001 ==> 1
7: 010 ==> 2
8: 011 ==> 3
这个数有32位,因此可以存储2^32个不同的值。其中一半是负数。
最大的可表示值为2,147,483,647
最小的可表示值为−2,147,483,648。
(请注意,还有一个额外的负值。)
好的,除开玩笑,如果你真正想要一个有用的记忆规则,这里有一个方法我经常用来记忆大数字。
你需要将数字分成由3到4个数字组成的部分,并且使用手机键盘上的投射方式进行可视化记忆。下面图片更容易理解:
如您所见,从现在开始您只需要记住3个形状,其中2个看起来像俄罗斯方块L形,另一个像打勾号。 这绝对比记忆10位数要容易得多。
当你需要回忆数字时,只需回忆形状,想象一下/查看一下手机键盘并对其进行投影即可。 也许最初你需要看一下键盘,但是只需要稍微练习一下,你就会记得数字是从左上角到右下角排列的,所以你可以在脑海中简单地想象它。
只需确保您记住形状的方向和每个形状中数字的数量(例如,在2147483647示例中,我们有一个由四位数字组成的俄罗斯方块L形和一个由三位数字组成的L形)。
您可以使用此技术轻松记住任何重要数字(例如,我记住了我的16位信用卡号等)。
首先将47写两遍,(你喜欢特工47,对吧?),保留空格(每个短横线代表一个数字槽。先是2个槽,然后是4个槽)
--47----47
假设你手头有 12
(因为12等于一打)。将其乘以代理47号码的第一个数字,即47
的第一个数字4
,并将结果放在你已经拥有的第一对数字的右侧。
12 * 4 = 48
--4748--47 <-- after placing 48 to the right of first 47
12
乘以 3
(为了使代理人47号的数字的第二位是7
,您需要 7-4=3
),并将结果放在第一对数字右侧,即最后一个空位。12 * 3 = 36
--47483647 <-- after placing 36 to the right of first two pairs
2-47483647 <-- after placing 2
2147483647 <-- after placing 1
就是这样!对于负数限制,你可以将其视为绝对值比正数限制多1。
多练习几次,你就会掌握它的!
对于整数来说,最简单的方法是使用十六进制,前提是没有类似于Int.maxInt()这样的东西。原因如下:
最大无符号值
8-bit 0xFF
16-bit 0xFFFF
32-bit 0xFFFFFFFF
64-bit 0xFFFFFFFFFFFFFFFF
128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
有符号值,最大有符号值为7F
8-bit 0x7F
16-bit 0x7FFF
32-bit 0x7FFFFFFF
64-bit 0x7FFFFFFFFFFFFFFF
使用有符号值,最大有符号值为80。
8-bit 0x80
16-bit 0x8000
32-bit 0x80000000
64-bit 0x8000000000000000
这是怎么工作的?这非常类似于二进制策略,每个十六进制数字恰好相当于4个比特位。另外,许多编译器在支持十六进制方面比支持二进制更好。
F hex to binary: 1111
8 hex to binary: 1000
7 hex to binary: 0111
0 hex to binary: 0000
所以7F等于01111111 / 7FFF等于0111111111111111。如果你要用它来表示“极高的常量”,那么7F是安全的十六进制,但很容易尝试一下7F和80并将它们打印到屏幕上以查看哪个是正确的。
0x7FFF + 0x0001 = 0x8000,所以你只损失了一个数字,因此通常使用0x7F...对于更可靠的代码而言不失为一个好的权衡,特别是当你开始使用32位或更多时。
2GB
(回答的最小长度是多少?)
假设使用.NET -
Console.WriteLine(Int32.MaxValue);