12

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

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

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

4

7 回答 7

5

换个思路,看看值是否可以打包成 4 个字节:

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

如果使用无符号值,pack("I", n)则改为。

于 2012-08-13T06:44:55.287 回答
5

假设最大的 32 位整数是0xffffffff

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

abs(n) <= 0xffffffff

在数字周围加上一个abs()也可以处理负面情况。

于 2018-03-01T11:46:59.690 回答
4

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

>>> 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
于 2012-08-13T06:04:44.543 回答
4
>>> def is_int32(number):
...     try:
...         return not(int(number)>>32)
...     except ValueError:
...         return False
于 2012-08-13T06:18:04.967 回答
1

简单的解决方案将是这样的

if abs(number) < 2**31 and number != 2**31 - 1:
   return True
else:
   return False

如果我们的号码在[−2^31, 2^31 − 1]范围内,我们很高兴

于 2020-09-17T18:50:39.533 回答
0
>>> def is_32_bit(n: int) -> bool:
...     if n in range(-2 ** 31, (2**31) - 1):
...         return True
...     return False
... 
>>> is_32_bit(9999999999)
False
>>> is_32_bit(1)
True
于 2021-07-06T12:15:13.597 回答
0

我们可以使用左移运算符来应用检查。

def check_32_bit(n):
    return n<1<<31
于 2021-10-24T10:18:51.387 回答