如何在python中检查32位环境中的整数



我正在解决leetcode问题7反向整数

条件为Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

下面是我的代码
class Solution:
def reverse(self, x: int) -> int:
if x
val = 0
pro, x = (1,x) if x>0 else (-1, -x)
flag = False
while x:
val=val*10+x%10
x//=10
if val.bit_length()>31:
flag = True
break
return 0 if flag else val*pro

代码工作得很好,解决了这个挑战。

但我仍然怀疑,这与整数溢出有关。

考虑到严格的32位环境,我们需要在该范围内反转一个数字,所以如果我们有一个不适合32位范围的数字的反转,那么它将流出或不存储(不知道正确的术语,在这里纠正我)那么我们如何检查那部分?

在简单的术语(我假设)中,在32位系统中,val.bit_length()应该限制为31位,并且添加到val的新int不会添加任何值,它保持不变。

老实说,很难理解你在要求什么。Python的int型存储在堆中(至少在CPython中),这意味着只要有足够的空间存储它,就没有int型大小限制。它是内部实现的。参见Python如何管理int和long?如果你需要真正的int32,你可以从mypy库中获得。

相比之下,在C语言中,int是固定的。如果您试图存储超出边界的值,则会发生整数溢出。C标准将这种情况定义为未定义行为(意思是任何事情都可能发生)。

最新更新