這是一個虛擬問題,但我需要更深入地理解它
uj5u.com熱心網友回復:
Python 整數使用二進制補碼來存盤有符號值。這意味著正數被簡單地存盤為它們的位序列(所以 14 是00001110因為它等于 8 4 2)。另一方面,負數是通過取正數、取反并加一來存盤的。所以 -14 是11110010。我們采用了 14 ( 00001110) 的按位表示,將其反轉 ( 11110001),并添加了一個 ( 11110010)。
但是還有一個額外的皺紋。Python 整數值是大數;它們可以任意大。所以我們通常的“這個數字存盤在 N 位中”的概念不成立了。相反,我們最終可能會得到兩個不同長度的數字。如果我們最終陷入那種情況,我們可能不得不簽署延長較短的合同。這只是一種奇特的說法“取最重要的位并重復它直到數字足夠長以滿足我們的喜好”。
所以在 和 的情況下14,-14我們有
0010
1110
我們&他們在一起。只有第二位(從右邊算起,或最低有效位)在兩者中都為真,所以我們得到0010, 或 2。另一方面,對于16和-16,我們得到
010000
110000
對于-16,我們采用正十六 ( ),翻轉所有010000位 ( 101111),然后添加一個,它一直傳遞到第二個最高有效位 ( )。當我們這些時,我們得到 16。110000&
010000
另見BitwiseOperators - Python Wiki
uj5u.com熱心網友回復:
按位運算是二進制運算。
在某些整數表示中,一位用于表示數字的符號。根據是哪一位,將改變按位 & 的結果。在 2 的補碼中,負數通過將所有位取反然后加 1 來表示。用二進制表示實數有很多種方法。無論如何,通常,正數和負數的按位運算總是會導致未定義的行為。可能是為什么大多數計算器在按位運算中只允許正整數。也就是說,足夠先進的計算器具有這樣的功能。
編輯:您選擇的具體數字很重要。數字 14 在二進制中使用比 16 更少的位來表示。碰巧的是 -16 和 16 都是完全相同的二進制(只看前五位,因為當你把它們放在一起時,其余的并不重要)
現在按位 & 只設定一個位,如果那個位在你和-ing 在一起的兩個數字中都設定了。
1110= 14
0010= -14
&0010= 2!
10000= 16
10000= -16
&10000= 16!
這就是你的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534362.html
標籤:Python位操作
下一篇:如何計算串列中所有點之間的距離?
