簡體   English   中英

Python移位負值與正值

[英]Python Bit Shifting Negative vs positive values

我最近正在進行移位,想知道為什么在下面的iPython輸出中,將值-1轉換為值4294967295會產生不同的結果嗎?

In [30]: val = -1

In [31]: print "hex x %d 0x%08X" % (val, val & 0xffffffff)

hex x -1 0xFFFFFFFF

In [32]: val = val >>22

In [33]: print "hex x %d 0x%08X" % (val, val & 0xffffffff)

hex x -1 0xFFFFFFFF

In [34]: val = 4294967295

In [35]: print "hex x %d 0x%08X" % (val, val & 0xffffffff)

hex x 4294967295 0xFFFFFFFF

In [36]: val = val >>22

In [37]: print "hex x %d 0x%08X" % (val, val & 0xffffffff)

hex x 1023 0x000003FF

非常感謝您的澄清,謝謝。

4294967295是0x0 ... 0FFFFFFFF。 -1是0xF ... FFFFFFFF。 永遠。

簡短版本:因為操作是用這種方式定義的。

加長版:根據文檔,“整數表示規則旨在最有意義地解釋涉及負整數的移位和掩碼運算。” 在一個數字可以任意大小但補碼表示為2的系統中,至少在概念上,符號擴展也可以任意攜帶。 因此,這實際上是唯一有意義的解釋。

這樣也保留了x >> n <=> int(x / (2 ** n))的不變量。

當在表達式中使用負數時,根據二進制補碼的規則,符號位必須一直擴展到表達式的左位。 右移保留了最左邊的1位。 向右偏移足夠數量的位數的負數將始終等於-1,就像向右偏移足夠數量的位數的正數將始終等於0一樣。

暫無
暫無

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

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