如何使用Python检查数字是否为32位整数?

如何使用Python检查数字是否为32位整数?,python,int,Python,Int,在我的程序中,我看到一个字符串,我想知道它是否代表一个32位整数 目前,我首先使用isdigit()检查它是否是一个数字,然后检查它是否超过2^32的值(假设我不关心无符号值) 检查输入字符串是否包含有效的32位整数的最佳方法是什么?对于无符号值,这将起作用: >>> def is32(n): ... try: ... bitstring=bin(n) ... except (TypeError, ValueError): ...

在我的程序中,我看到一个字符串,我想知道它是否代表一个32位整数

目前,我首先使用
isdigit()
检查它是否是一个数字,然后检查它是否超过2^32的值(假设我不关心无符号值)


检查输入字符串是否包含有效的32位整数的最佳方法是什么?

对于无符号值,这将起作用:

>>> def is32(n):
...     try:
...         bitstring=bin(n)
...     except (TypeError, ValueError):
...         return False
...         
...     if len(bin(n)[2:]) <=32:
...         return True
...     else:
...         return False    
... 
>>> is32(2**32)
False
>>> is32(2**32-1)
True
>>> is32('abc')
False
def为32(n): ... 尝试: ... 位字符串=bin(n) ... 除了(TypeError、ValueError): ... 返回错误 ... ... 如果len(bin(n)[2:])>>is32(2**32) 假的 >>>is32(2**32-1) 真的 >>>is32(‘abc’) 假的
另一个想法,看看该值是否可以压缩为4字节:

>>> from struct import pack, error
>>> def test_32bit(n):
...     try:
...             pack("i", n)
...     except error:
...             return False
...     return True
... 

如果使用无符号值,
pack(“I”,n)

假设最大的32位整数为

然后,我们需要检查我们的数字是否大于此值:

abs(n) <= 0xffffffff

abs(n)简单的解决方案如下

if abs(number) < 2**31 and number != 2**31 - 1:
   return True
else:
   return False
如果abs(编号)<2**31和编号!=2**31 - 1:
返回真值
其他:
返回错误

如果我们的号码在
[−2^31,  2^31 − 1] 
range我们很乐意去

lol…是的,确实如此…但是这是一种有效的方法还是有更好的方法呢?你能发布你的确切代码吗,所以我们可以看到实现?我可能会使用位运算符。为什么我不能检查它是否在上下边界值的范围内?通过对bin使用
try
,您可以验证n是一个有效的数字。当您进行此操作时,只需检查位的长度是否小于32位。整天都在工作…这很酷…但是isDigit不是已经在检查它是否是一个有效的数字了吗?我正在使用str.isDigit()方法作为预筛选来检查它是否是一个数字表示形式,然后将它输入到它的整数表示形式中,并根据它的边界进行检查@user1020069:这可能也行。按照我所写的方式,Python正在为您计算。如果您正在检查一个字符串,它将被有效的
is32(2**31)
阻塞,因为该字符串包含“**”,这只是更多的步骤。使用适合上下文的内容。不要使用裸露的except子句,因为它可以捕获不应该在此处捕获的内容,例如键盘中断。@AbeKarplus我知道,但我只是懒惰:)这不适用于负数:>>>is_int32(-1):false正数和负数限制不一样,-2^31和2^31-1有符号整数的十六进制值应为
0x7fffff
if abs(number) < 2**31 and number != 2**31 - 1:
   return True
else:
   return False