我永远记不住这个数字.我需要一个记忆规则.
这是2,147,483,647.记忆它的最简单方法是通过纹身.
我能想到的最正确的答案是Int32.MaxValue
.
如果您认为在基数10中难以记住该值,请尝试基数2:111111111111111111111111111111111
如果你能记住整个Pi数,那么你要找的数字是1,867,996,680,直到Pi的十进制数字1,867,996,689.
数字字符串2147483647出现在Pi的1,867,996,680十进制数字处.3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...
来源:http://www.subidiom.com/pi/
它是10位数,所以假装它是一个电话号码(假设你在美国).214-748-3647.我不建议打电话给它.
而不是将其视为一个大数字,尝试将其分解并寻找相关的想法,例如:
2次斯诺克最大休息时间(最大休息时间为147次)
4年(48个月)
3年(36个月)
4年(48个月)
以上适用于最大负数; 积极的是减一.
也许上面的细分对你来说不再令人难忘(这简直令人兴奋!),但希望你能提出一些想法!
最大负(32位)值:-2147483648
(1 << 31)
最大正(32bit)值:2147483647
~(1 << 31)
助记:"醉AKA角质"
drunk ========= Drinking age is 21 AK ============ AK 47 A ============= 4 (A and 4 look the same) horny ========= internet rule 34 (if it exists, there's 18+ material of it) 21 47 4(years) 3(years) 4(years) 21 47 48 36 48
无论如何,取这个正则表达式(它确定字符串是否包含十进制形式的非负整数,也不大于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]
也许它会帮助你记住.
这就是我记忆中的2147483647
:
214 - 因为2.14大约是pi-1
48 = 6*8
64 = 8*8
水平写这些:
214_48_64_ and insert: ^ ^ ^ 7 3 7 - which is Boeing's airliner jet (thanks, sgorozco)
现在你有了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(signed int max)是2 ^ 30(约10亿)次2 ^ 1(2),或大约20亿.并且2 ^ 32是2 ^ 30*2 ^ 2或大约40亿.这种近似方法足够准确,甚至大约2 ^ 64(误差增加到大约15%).
如果你需要一个确切的答案,那么你应该拿一个计算器.
方便的字对齐容量近似值:
2 ^ 16~ = 64千// uint16
2 ^ 32~ = 40亿// uint32,IPv4,unixtime
2 ^ 64~ = 16 quintillion(又名160亿或1600万万)// uint64,"bigint"
2 ^ 128~ = 256 quintillion quintillion(又名256万亿亿亿)// IPv6,GUID
只需使用任何不错的计算器并在十六进制模式下键入"7FFFFFFF",然后切换到十进制.
2147483647.
这是关于2.1 * 10^9
.无需确切知道2^{31} - 1 = 2,147,483,647
.
你可以在C中找到它:
#include
#include
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,295C++ 11
std::cout << std::numeric_limits::max() << "\n";
std::cout << std::numeric_limits::max() << "\n";
Java的
您也可以使用Java获得此功能:
System.out.println(Integer.MAX_VALUE);
但请记住,Java整数始终是签名的.
Python 2Python有任意精度整数.但是在Python 2中,它们被映射到C整数.所以你可以这样做:
import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L
所以Python切换到long
整数大于的时候2^31 -1
这是一个记忆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
我经常使用两个18的力量来记住它们,但即使我没有记住2**31.根据需要计算太容易或使用常数,或估计为2G.
32位,一个用于符号,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示例中,我们有4位俄罗斯方块L和3位数L).
您可以使用此技术轻松记住任何重要的数字(例如,我记得我的16位信用卡号码等).
对整数执行此操作的最简单方法是使用十六进制,前提是不存在类似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位.此外,许多编译器支持hex比支持二进制文件要好得多.
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位或更多
首先写出47两次,(你喜欢Agent 47,对吗?),保持空间如图所示(每个破折号是一个数字的插槽.前2个插槽,然后4个)
--47----47
认为你12
手头(因为12 =十几个).乘以4
代理47的数字的第一个数字,即47
,将结果放在您已经拥有的第一对的右侧
12 * 4 = 48 --4748--47 <-- after placing 48 to the right of first 47
然后乘12
用3
(为了使代理47的号码,这是第二个数字7
,你需要7 - 4 = 3
),并把结果前2对的右侧,最后一对槽
12 * 3 = 36 --47483647 <-- after placing 36 to the right of first two pairs
最后从最右边的数字(本例中为2)开始逐一从手中拖动数字并将它们放在你得到的第一个空槽中
2-47483647 <-- after placing 2 2147483647 <-- after placing 1
你有它!对于负限制,您可以将其视为绝对值比正限制多1.
练习几次,你就会掌握它!
2GB
(答案的最小长度是多少?)
假设.NET -
Console.WriteLine(Int32.MaxValue);
如果你碰巧知道你的ASCII表,而不是MaxInt
:
!GH6G = 21 47 48 36 47
记住它的最好规则是:
21(幻数!)
47(只记得它)
48(顺序!)
36(21 + 15,两个魔法!)
47再次
此外,它更容易记住5对而不是10位数.
最容易记住的方法是看 std::numeric_limits< int >::max()
例如(来自MSDN),
// numeric_limits_max.cpp #include#include using namespace std; int main() { cout << "The maximum value for type float is: " << numeric_limits ::max( ) << endl; cout << "The maximum value for type double is: " << numeric_limits ::max( ) << endl; cout << "The maximum value for type int is: " << numeric_limits ::max( ) << endl; cout << "The maximum value for type short int is: " << numeric_limits ::max( ) << endl; }
有趣的是,Int32.MaxValue的字符数多于2,147,486,647.
但话说回来,我们确实有代码完成,
所以我想我们真正需要记住的是Int3
,在visual studio中只输入6个字符.
更新 由于某种原因,我被投票了.我能想到的唯一原因是他们不理解我的第一个陈述.
"Int32.MaxValue"最多需要输入14个字符.2,147,486,647需要输入10或13个字符,具体取决于您是否输入逗号.
只记得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位的unsigned int,再次加倍为40亿.当然,误差因子越大,但你不需要记忆的确切值(如果你需要它,你应该使用预定义的常量).近似值足以让人注意到什么东西可能危险地接近溢出.
这是我如何记住2,147,483,647
2 - To 1 - A 4 - Far 7 - Savannah 4 - Quarter 8 - Optimus 3 - Trio 6 - Hexed 4 - Forty 7 - Septenary
你什么意思?应该很容易记住它是2 ^ 32.如果你想要一个规则来记住那个数字的值,一个方便的经验法则是在二进制和十进制之间进行转换:
2 ^ 10~1000
这意味着2 ^ 20~1,000,000
和2 ^ 30~1,000,000,000
双倍(2 ^ 31)是20亿,并且再次加倍(2 ^ 32)是40亿.
这是一种简单的方法来粗略估计任何二进制数.二进制中的10个零成为十进制的3个零.
在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
Int32表示您有32位可用于存储您的号码.最高位是符号位,这表示该数字是正数还是负数.所以你有2 ^ 31位的正数和负数.
如果为正数,则得到逻辑范围(前面提到过)
+2147483647至-2147483648
如果您认为这是小的,请使用Int64:
+9223372036854775807至-9223372036854775808
为什么你想要记住这个数字呢?要在你的代码中使用?您应该始终在代码中使用Int32.MaxValue或Int32.MinValue,因为这些是静态值(在.net内核中),因此比使用代码创建新int更快.
我的陈述:如果通过记忆知道这个数字..你只是炫耀!
请记住:21 IQ ITEM 47
它可以使用任何手机垫进行解码,也可以自己在纸上写下一个.
为了记住"21 IQ ITEM 47",我会选择"Hitman:Codename 47有21个任务,这些任务都是IQ ITEM的".
或者"我每天21:47清洁牙齿,因为我的智商高,不喜欢嘴里的东西".