簡體   English   中英

如何使用 Python 檢查數字是否為 32 位 integer?

[英]How do I check if a number is a 32-bit integer using Python?

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

目前我首先使用isdigit()檢查它是否是一個數字,然后我檢查它是否超過 2^32 的值(假設我不關心無符號值)。

檢查我的輸入字符串是否包含有效的 32 位 integer 的最佳方法是什么?

假設最大的 32 位整數是0xffffffff

然后,我們需要檢查我們的數字是否大於這個值:

abs(n) <= 0xffffffff

在數字周圍包裹一個abs()也將處理負面情況。

只是另一個想法,看看值是否可以打包成 4 個字節:

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

如果使用無符號值,則改為pack("I", n)

>>> def is_int32(number):
...     try:
...         return not(int(number)>>32)
...     except ValueError:
...         return False

對於無符號值,這將起作用:

>>> 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

簡單的解決方案將是這樣的

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

如果我們的數字在[−2^31, 2^31 − 1]范圍內,我們很高興

>>> 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

我們可以使用左移運算符來應用檢查。

def check_32_bit(n):
    return n<1<<31

在這里找到答案: https://docs.python.org/2/library/stdtypes.html#int.bit_length

我認為最簡單有效的解決方案

>>> your_num = 2147483651
>>> your_num.bit_length()
32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM