我总是记不住那个数字,我需要一个记忆规则。
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
对于无符号Int32,将其变为32个1而不是31个。
但由于有一些更冒险的方法被发布,我开始考虑公式,只是为了好玩...
公式1(如果没有给出运算符,则连接数字)
Python快速检查
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
Python 快速检查
x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1)
# gives '2147483647'
在 C 中,在 #include <stdint.h>
后使用 INT32_MAX
。
在 C++ 中,在 #include <cstdint>
后使用 INT32_MAX
。
或者使用平台特定大小的 INT_MAX
,或者对于 unsigned int
使用 UINT32_MAX
或 UINT_MAX
。请参见 http://www.cplusplus.com/reference/cstdint/ 和 http://www.cplusplus.com/reference/climits/。
或者使用 sizeof(int)
。
如果你无法记住一个巨大的整数,那么你可以记住这个助记符。
现在统计每个单词中的字母数。
它是2的31次方-1(32位,其中一位用于符号)。
如果您想要一个近似值,请使用2的10次方= 1024≈10的3次方,因此2的31次方≈2*10的9次方。如果您想手动计算精确值,请使用指数平方法得到2的32次方= 2(2的5次方),然后除以二。只需要平方五次即可得到2的32次方:
2*2 = 4
4*4 = 16
16*16 = 256
256*256 = 25*25*100 + 2*250*6 + 36 = 62500 + 3000 + 36 = 65536
65536*65536 =65000*65000 + 2*65000*536 + 536*536 =
4225000000 + 130000*536 + (250000 + 3600 + 36*36) =
4225000000 + 69680000 + 250000 + 3600 + 1296 =
4294967296
将其除以2并减去1即可得到2,147,483,647。如果您不需要所有数字,而只想要前三个有效数字,则每个平方步骤的计算非常容易。
max_signed_32_bit_num = 1 << 31 - 1; // alternatively ~(1 << 31)
编译器应该会进行优化。
我更喜欢 1 << 31 - 1
而不是
0x7fffffff
因为你不需要数 f
s
unsigned( pow( 2, 31 ) ) - 1
因为你不需要 <math.h>
0x7FFF_FFFF
- Alexander