Python 对整数的处理能力非常强大,强大到什么程度?天文数字也能轻松处理,而且不会发生溢出。
上图展示的是Python对位移操作的结果。来对比一下JavaScript环境中同样的计算是什么结果:
JavaScript、C语言的整数型如果是signed 32bit,其取值范围是-2147483648 ~ 2147483647。以前学这种编程语言时,相信大家都跟我一样纳闷为什么在计算之前一定要先来一波变量的声明?神马int、signed int、unsigned int、long int,后来学python编程发现不需要声明变量,随便一个变量名称信手拈来就能用,学习压力变轻松了。但到了现在忽然发现有时候我们并不需要Python处理这么多位数的整数,只需要32位整数就够了。可惜Python偏偏没有声明32 bit整数型的语句,为了使Python计算结果JavaScript、C的计算一样,我们只好借助ctypes库的c_int32()函数处理:
from ctypes import c_int32
def i32(n):
# 如果n是负数就转换为32位对应的数
if n < 0:
n = (1 << 32) + n
return c_int32(n).value
还可以使用lambda精简成一行代码:
i32 = lambda x: c_int32(x).value if x >= 0 else c_int32((1 << 32) + x).value
运行结果: