2011-12-13 21 views
1

有這樣的代碼:檢查大整數值的類型不帶符號

print isinstance(2147483647, int) # True - max signed 32-bit integer 
print isinstance(4294967295, int) # False - max unsigned 32-bit integer 
print isinstance(18446744073709551615, int) # False - max unsigned 64-bit integer 

如何檢查是否值是32位無符號整數和64位無符號整數?

+2

你爲什麼在乎它是什麼類型? –

+1

要檢查類型,只需使用'type()'。你真的在這裏問什麼?它可能是使用的底層C類型,或者是否給定的整數適合特定的C類型?這個問題還不清楚。 –

回答

4

如果您只想檢查數字是否適合32位整數或64位整數,則有一種方法稱爲bit-length,您可以檢查並確定結果是否小於32。

例如,

>>> def Is32or64(x): 
    return 32 if x.bit_length() < 32 else 64 

>>> Is32or64(2**30) 
32 
>>> Is32or64(2**40) 
64 
+0

對於大於2 ** 64的數字不起作用,並且不清楚您的意思是說它是否適合簽名或未簽名該大小的整數。 –

+0

@ScottGriffiths可能你錯過了我說的部分'如果你只是想檢查數字是否適合32位整數或64位整數'。 OP也很滿意答案:-) – Abhijit

+0

那麼,如果我想檢查2 ** 100是否適合32位或64位整數呢?或者你是否建議只有在首次檢查「x」符合64位時才起作用?一些符合32位無符號整數的數字不適合有符號的32位整數,並且不清楚你的意思。 OP可能會很開心,但我認爲OP有點困惑。 –

0

您可以使用2**x

2147483647 == 2**32 
18446744073709551615 == 2**64 
2

不能檢查無符號整型,因爲沒有無符號整數類型。

Python 2有兩種類型的整數:int(固定範圍,平臺相關,至少32位)和long(無限大整數)。兩人都簽字。

在您的示例中,第一個值的類型爲int,另外兩個爲long。如果你想知道一個值適合64位整數的範圍內,做一個普通的比較:

if (x >= 0) and (x < 2**64): 
    pass 

與Python版本2.7和3.1開始,有int.bit_length()方法,計算出多少位的二進制表示這個數字已經忽略了這個標誌。

+1

如果0 <= x <2 ** 64',您也可以方便地寫入# –

相關問題