限制python计算使用32位整数 (signed 32bit int)

Python 对整数的处理能力非常强大,强大到什么程度?天文数字也能轻松处理,而且不会发生溢出。

039aa53c60374cd78ad97a266cf11a2c.png

上图展示的是Python对位移操作的结果。来对比一下JavaScript环境中同样的计算是什么结果:


f2b6f6de25354d27a0d8aa60b1b64704.png

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

运行结果:

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值