我总是记不住电话号码。我需要一个记忆规则。
当前回答
一般来说,你可以做一个简单的操作,它反映了Int32的本质,用1填充所有可用的位-这是你可以很容易地保存在你的内存中的东西。它在大多数语言中的工作方式基本相同,但我以Python为例:
max = 0
bits = [1] * 31 # Generate a "bit array" filled with 1's
for bit in bits:
max = (max << 1) | bit
# max is now 2147483647
对于unsigned Int32,将其设置为32而不是31个1。
但因为有一些更冒险的方法,我开始考虑公式,只是为了好玩…
公式1(如果没有给出运算符,则将数字连在一起)
a = 4 b = 8 巴/ a ab-1 接 ab-a-b ab-1
Python quickcheck
a = 4
b = 8
ab = 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'
公式2
X = 48 x / 2 - 3 x - 1 x x * 3/4 x - 1
Python quickcheck
x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1)
# gives '2147483647'
其他回答
一般来说,你可以做一个简单的操作,它反映了Int32的本质,用1填充所有可用的位-这是你可以很容易地保存在你的内存中的东西。它在大多数语言中的工作方式基本相同,但我以Python为例:
max = 0
bits = [1] * 31 # Generate a "bit array" filled with 1's
for bit in bits:
max = (max << 1) | bit
# max is now 2147483647
对于unsigned Int32,将其设置为32而不是31个1。
但因为有一些更冒险的方法,我开始考虑公式,只是为了好玩…
公式1(如果没有给出运算符,则将数字连在一起)
a = 4 b = 8 巴/ a ab-1 接 ab-a-b ab-1
Python quickcheck
a = 4
b = 8
ab = 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'
公式2
X = 48 x / 2 - 3 x - 1 x x * 3/4 x - 1
Python quickcheck
x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1)
# gives '2147483647'
使用Java 9的REPL, jshell:
$ jshell
| Welcome to JShell -- Version 9-Debian
jshell> System.out.println(Integer.MAX_VALUE)
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;
}
假设。net -
Console.WriteLine(Int32.MaxValue);
对于整数,最简单的方法是使用十六进制,前提是没有类似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位或更多位的代码时
推荐文章
- Java整数到字节数组
- 如何优雅地检查一个数字是否在一个范围内?
- 从整数列表中,求出最接近给定值的数
- 在python中将整数转换为二进制
- 如何将对象转换为int型
- Java如何处理整数下溢和溢出,如何检查它?
- 在Java和c#中,int和Integer的区别是什么?
- 是否有一种方法可以迭代一系列整数?
- 为什么整数除法产生一个浮点数而不是另一个整数?
- 在python中最安全的方法将浮点数转换为整数?
- 我如何工作围绕JavaScript的parseInt八进制行为?
- 将两个整数以唯一且确定的方式映射为一个整数
- 如何在Java中正确地比较两个整数?
- 将逗号分隔的字符串转换为整数数组?
- 将逗号分隔的字符串转换为整数数组?