2012-08-13 147 views
1

在我的程序中我正在查看一個字符串,我想知道它是否代表一個32位整數。如何使用Python檢查數字是否是32位整數?

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

什麼是檢查我的輸入字符串包含有效的32位整數的最佳方法是什麼?

+2

這樣不起作用? – Dogbert 2012-08-13 05:40:16

+0

哈哈......是的......但這是一種有效的方式還是有更好的方法呢? – user1020069 2012-08-13 05:44:17

+1

你可以發佈你的確切代碼,所以我們可以看到實現? – Dogbert 2012-08-13 05:45:54

回答

2

對於無符號值,這將工作:

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

爲什麼我不能檢查它是否落在上限值和下限值的範圍內? – user1020069 2012-08-13 06:13:54

+0

通過在bin中使用'try'你正在驗證n是一個有效的數字。當你在這裏時,只要檢查這些位是否少於32位。整天工作...... – dawg 2012-08-13 06:18:52

+0

這很酷..但是不是isDigit已經檢查,如果它是一個有效的數字? – user1020069 2012-08-13 06:23:27

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

這對於負數不起作用:>>> is_int32(-1):False – 2017-05-30 03:04:01

1

只是另一個想法,看看它的值可以被裝在一個4個字節:

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

如果用無符號值工作,代替pack("I", n)

+1

不要使用裸的except子句,因爲它可以捕獲諸如KeyboardInterrupt這不應該在這裏抓到。 – 2012-08-13 15:29:55

+0

@AbeKarplus我知道,但我只是懶惰:) – Kimvais 2012-08-13 17:42:42

0

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

然後,我們需要檢查我們的數量是大於這個值:

abs(n) <= 0xffffffff 

包裝紙的abs()在號碼會照顧負面的情況也是如此。

相關問題