簡體   English   中英

python - 正整數上的位移產生負整數......怎么會發生這種情況?

[英]python - bit shift on positive integer producing negative integer … how could this happen?

我已經創建了一個Python 3 BitSet類,我用它來從0開始的整數域上進行快速設置操作。

我正在使用BitSet在基於圖形的算法中遇到一個錯誤。 我的調試代碼

print(v)
print(v == 63)
print(1 << v)

產生以下輸出(注意最后一行的符號):

63
True
-9223372036854775808

當我在翻譯中嘗試以下內容時,我得到了正在尋找的正面答案:

>>> 1 << 63
9223372036854775808
>>> x = 1 << 61 | 1 << 63
>>> x
11529215046068469760
>>> bin(x)
'0b1010000000000000000000000000000000000000000000000000000000000000'

一個線索是,此代碼產生錯誤的第一個位置接近我的系統的sys.maxsize(9223372036854775807,或2 ^ 63 - 1)。

有什么可能導致這種行為的想法?

到目前為止我嘗試過的

我試圖在整數溢出等上讀取所有可能的內容。我不會認為Python 3(使用它的任意長度整數)會產生這種錯誤。

如果二進制表示的整數具有最高有效位為“1”,則將其視為負數。

在這里閱讀更多:

兩個補碼

暫無
暫無

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

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