int32的最大值是多少?

我永远记不住号码。我需要一个记忆规则。

1804140 次浏览

它有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个月)

以上适用于最大的负数;正是负1。

也许上面的分解对你来说不会更难忘(这几乎不令人兴奋!),但希望你能想出一些想法!

只需使用任何体面的计算器并在十六进制模式下输入“7FFFFFFF”,然后切换到十进制。

2147483647。

2^(x+y) = 2^x * 2^y
2^10 ~ 1,0002^20 ~ 1,000,0002^30 ~ 1,000,000,0002^40 ~ 1,000,000,000,000(etc.)
2^1 = 22^2 = 42^3 = 82^4 = 162^5 = 322^6 = 642^7 = 1282^8 = 2562^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~=6.4万//uint16
  • 2^32~=40亿//uint32, IPv4, unixtime
  • 2^64~=1600京(160亿或1600万万亿)//uint64,"bigint"
  • 2^128~=2.56垓万亿(又名256万亿万亿)//IPv6,GUID

2GB

(答案有最小长度吗?)

请记住,2^(10*x)大约是10^(3*x)-您可能已经习惯了千字节/kibibytes等。

2^10 = 1024                ~= one thousand2^20 = 1024^2 = 1048576    ~= one million2^30 = 1024^3 = 1073741824 ~= one billion

由于int使用31位(符号为+~1位),因此只需将2^30翻倍即可获得大约20亿。对于使用32位的无符号int,40亿再次翻倍。当然,误差因子越大,错误因子越高,但你不需要记住确切的值(如果你需要它,你应该为它使用预定义的常量)。近似值足以注意到什么时候可能危险地接近溢出。

在路径上使用Groovy:

groovy -e " println Integer.MAX_VALUE "

(Groovy对于Java上下文中的快速参考非常有用。

你是什么意思?应该很容易记住它是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为基数:1111111111111111111111111111111

这很容易记住。在十六进制中,一位数是4位。因此,对于无符号int,将0x和8fs(0xffffffff)写入Python或Ruby shell以获取以10为底的值。如果您需要有符号值,请记住最高位用作符号。因此您必须省略它。您只需要记住,较低的3位为1,第4位为0的数字等于7,因此将0x7fffffff写入Python或Ruby shell。您也可以写入0x100000000 - 10x80000000 - 1,如果这样更容易记住的话。

我记得
在十六进制中,一个数字代表四位,所以4*8=32,所以最大有符号32位int是:

0xFFFFFFFF >> 1 # => 2147483647

最大负值(32位):-2147483648
(1<<31)

最大正值(32位):2147483647
~(1<<31)

助记符:"喝醉了AKA角质"

drunk ========= Drinking age is 21AK ============ AK 47A ============= 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

对整数执行此操作的最简单方法是使用十六进制,前提是没有类似Int.maxInt()的东西。原因是这样的:

最大无符号值

8-bit 0xFF16-bit 0xFFFF32-bit 0xFFFFFFFF64-bit 0xFFFFFFFFFFFFFFFF128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

有符号值,使用7F作为最大有符号值

8-bit 0x7F16-bit 0x7FFF32-bit 0x7FFFFFFF64-bit 0x7FFFFFFFFFFFFFFF

有符号值,使用80作为最大有符号值

8-bit 0x8016-bit 0x800032-bit 0x8000000064-bit 0x8000000000000000

这是如何工作的?这与二进制策略非常相似,每个十六进制数字正好是4位。此外,许多编译器支持十六进制比支持二进制好得多。

F hex to binary: 11118 hex to binary: 10007 hex to binary: 01110 hex to binary: 0000

所以7F等于01111111/7FFF等于0111111111111111。此外,如果您将其用于“疯狂高常数”,7F…是安全的十六进制,但尝试7F和80很容易,只需将它们打印到屏幕上即可查看是哪个。

0x7FFF+0x0001=0x8000,因此您的损失只有一个数字,因此使用0x7F…通常对于更可靠的代码来说并不是一个糟糕的权衡,尤其是一旦您开始使用32位或更多位

这是关于2.1 * 10^9。不需要知道确切的2^{31} - 1 = 2,147,483,647

C

你可以像这样在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,647max unsigned int: 4,294,967,295

C++11

std::cout << std::numeric_limits<int>::max() << "\n";std::cout << std::numeric_limits<unsigned int>::max() << "\n";

Java

你也可以用Java:

System.out.println(Integer.MAX_VALUE);

但请记住,Java整数总是有符号的。

python2

Python有任意精度整数。但在Python 2中,它们映射到C整数。所以你可以这样做:

import syssys.maxint>>> 2147483647sys.maxint + 1>>> 2147483648L

所以当整数大于2^31 -1时,Python切换到long

这是一个记忆2**31的助记符,减去1得到最大的整数值。

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 Hide2    1   4    7  4    8        3    6      4     8

我经常使用2到18的幂来记住它们,但即使我也没有费心记住2**31。根据需要计算或使用常数或估计为2G太容易了。

我记得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。

我希望这至少有一点帮助。

32位,一个用于符号,31位信息:

2^31 - 1 = 2147483647

为什么是-1?
因为第一个是零,所以最大的是数减一

编辑cantfindaname88

计数是2^31,但最大值不能是2147483648(2^31),因为我们从0开始计数,而不是1。

Rank   1 2 3 4 5 6 ... 2147483648Number 0 1 2 3 4 5 ... 2147483647

另一种解释只有3位:1表示符号,2表示信息

2^2 - 1 = 3

以下所有可能的值为3位:(2^3=8个值)

1: 100 ==> -42: 101 ==> -33: 110 ==> -24: 111 ==> -15: 000 ==>  06: 001 ==>  17: 010 ==>  28: 011 ==>  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的最大值是1111111111111111111111111111111但是在10的基础上,你会发现它是2147483647或2^31-1或Int32。MaxValue

如果你碰巧记住了你的ascii表而不是MaxInt
!GH6G = 21 47 48 36 47

记住它的最佳规则是:
21(神奇的数字!)
47(记住就行了)
48(连续!)
36(21+15,都是魔法!)
47又一次

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

首先写出47两次,(你喜欢特工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 22147483647 <-- after placing 1

对于负极限,你可以认为它在绝对值中比正极限多1。

练习几次,你就会掌握诀窍!

我就是这样记住2,147,483,647的

到一个遥远的大草原,克普洛斯三重奏被诅咒了四十年

2 - To1 - A4 - Far7 - Savannah4 - Quarter8 - Optimus3 - Trio6 - Hexed4 - Forty7 - Septenary

如果您能记住整个Pi数,那么您要查找的数字位于Pi十进制数字的位置1,867,996,680到1,867,996,689

数字字符串2147483647出现在Pi的1,867,996,680小数位。3.14…86181221809936452346214748364710527835665425671614…

来源:http://www.subidiom.com/pi/

记住这一点:21 IQ第47项

它可以用任何电话板去编码,或者你可以自己在纸上写一个。

为了记住“21 IQ ITEM 47”,我会选择“Hitman:Codename 47有21个任务,每个IQ ITEM都是自己的”。

或者“我每天21:47刷牙,因为我智商高,不喜欢嘴里的东西”。

max_signed_32_bit_num = 1 << 31 - 1;  // alternatively ~(1 << 31)

编译器无论如何都应该优化它。

我更喜欢1 << 31 - 1

0x7fffffff因为你不需要计数f

unsigned( pow( 2, 31 ) ) - 1因为你不需要<math.h>

它是231−1(32位,1位用于符号)。

如果你想要一个近似值,请使用210=1024×103,因此231×2*109。如果你想手动计算一个精确的值,请使用平方求幂得到232=2(25)并除以2。你只需要平方五次就可以得到232

2*2 = 44*4 = 1616*16 = 256256*256 = 25*25*100 + 2*250*6 + 36 = 62500 + 3000 + 36 = 6553665536*65536 =65000*65000 + 2*65000*536 + 536*536 =4225000000 + 130000*536 + (250000 + 3600 + 36*36) =4225000000 + 69680000 + 250000 + 3600 + 1296 =4294967296

除以二减去一得到2,147,483,647。如果您不需要所有数字,而只想说,前三个有效数字,每个平方步骤的计算非常容易。

在C中,在#include <stdint.h>之后使用INT32_MAX。C++在#include <cstdint>之后使用INT32_MAX

或者INT_MAX用于特定于平台的大小,或者UINT32_MAXUINT_MAX用于unsigned int。参见http://www.cplusplus.com/reference/cstdint/http://www.cplusplus.com/reference/climits/

或者sizeof(int)

使用Java9的REPL,jshell

$ jshell|  Welcome to JShell -- Version 9-Debian
jshell> System.out.println(Integer.MAX_VALUE)2147483647

永远不要忘记任何类型的最大值:

如果它有32位,则最大可能的值是数字为1的32位:

在此处输入图片描述

结果将是十进制的4294967295:

在此处输入图片描述

但是,由于也有负数的表示,将4294967295除以2,得到2147483647。

因此,32位整数能够表示-2147483647到2147483647

请记住,这是第八个梅森素数。

如果这太难了,它也是已知的四个双倍梅森素数中的第三个。

根据评论请求进行编辑:

欧几里得-欧拉定理指出,每个偶数都有形式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是素数,如上所述,这种形式的素数是梅森素数。我们可以通过简单地计算它们来证明它是这样的8。有关更多细节,请询问欧拉,或者伯努利(他写过关于它们的文章)。

见:https://books.google.ie/books?id=x7p4tCPPuXoC&; printsec=封面&dq=9780883853283&hl=en&sa=X&ve=0ahUKEwilzbORuJLdAhUOiaYKHcsZD-EQ6AEIKTAA#v=网页&q=9780883853283&f=false

好吧,除了笑话,如果你真的在寻找一个有用的记忆规则,有一个我总是用来记住大数字。

您需要将您的数字从3-4位数字分解为几部分,并使用手机键盘上的投影直观地记住它们。在图片上显示更容易:

在此处输入图片描述

正如你所看到的,从现在开始你只需要记住3个形状,其中2个看起来像俄罗斯方块L,1个看起来像蜱。这肯定比记住10位数字容易得多。

当你需要回忆数字时,只需回忆形状,想象/查看手机键盘并将形状投影在其上。也许一开始你必须看键盘,但经过一点练习,你会记住数字是从左上角到右下角的,所以你将能够简单地在脑海中想象它。

只要确保您记住形状的方向和每个形状中的位数(例如,在2147483647示例中,我们有一个4位数的俄罗斯方块L和一个3位数的L)。

您可以使用此技术轻松记住任何重要数字(例如,我记住了我的16位信用卡号码等)。

一般来说,你可以做一个简单的操作,它反映了Int32的本质,用1填充所有可用的位-这是你可以轻松保存在内存中的东西。它在大多数语言中的工作方式基本相同,但我以Python为例:

max = 0bits = [1] * 31 # Generate a "bit array" filled with 1'sfor bit in bits:max = (max << 1) | bit# max is now 2147483647

对于无符号的Int32,将其设为32而不是31 1。

但是由于有一些更冒险的方法,我开始考虑公式,只是为了好玩…

f1(如果没有给出运算符,则连接数字)

  • a=4
  • b=8
  • ba/a
  • ab-1
  • ab
  • ab-a-b
  • ab-1

python快速检查

a = 4b = 8ab = int('%d%d' % (a, b))ba = int('%d%d' % (b, a))'%d%d%d%d%d' % (ba/a, ab-1, ab, ab-a-b, ab-1)# gives '2147483647'

二级方程式

  • x=48
  • x/2-3
  • x-1
  • x
  • x*3/4
  • x-1

python快速检查

x = 48'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1)# gives '2147483647'

2147483647

以下是你需要记住的:

  • 这是20亿
  • 接下来的三个三胞胎像这样增加:100秒,400秒,600秒
  • 第一个和最后一个三元组需要添加3,因此它们被四舍五入到50(例如147+3=150&647+3=650)
  • 第二个三元组需要从它减去3才能将其四舍五入到80(例如483-3=480)

因此2,147,483,647

试试Python:

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

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

“如果一个大整数没有被召回,你会想起这个助记符。

现在计算每个单词中的字母。