2015-09-15 37 views
-2

我有32位數字A=0x0000000AB=0X00000005在Python中將數字轉換爲32位

我通過A^B得到一個xor B,它給出0b1111。

我旋轉了這個並得到了D=0b111100000,但我希望這是32位數字不僅用於打印,但我需要MSB位,即使在這種情況下有0進行進一步操作。

+1

「我需要MSB位,即使在這種情況下有0進一步操作「:這是什麼意思? –

回答

1

要獲得整數的二進制數,您可以使用bin()

只是一個簡單的例子:

>>> i = 333333 
>>> print (i) 
333333 
>>> print (bin(i)) 
0b1010001011000010101 
>>> 
+2

我認爲你的意思是'bin()'不是'bit()' – Leb

+0

哦......壞的錯字。固定+ Thx。 – frlan

+1

嘿,我做到了,但說A或B出來是十進制15我得到斌(ANSWER)它給了我0b1111,但我想擁有0b00000000000000000000000000001111 –

2

大多數高級語言都沒有ROR/ROL運營商。有兩種方法可以解決這個問題:一種方法是添加一個外部庫,如ctypes或https://github.com/scott-griffiths/bitstring,它們支持循環或bitlice整數支持(這很容易添加)。

要記住的一件事是Python是'無限'的精度 - 那些MSB總是0爲正數,1爲負數; python存儲儘可能多的數字,因爲它需要保持與默認值的最大幅度差異。這就是你在python中看到怪異符號的一個原因,就像〜(0x3)顯示爲-0x4,這在二進制補碼錶示中是等效的,而不是等價的正值,但-0x4總是總是是真的,即使你和它對一個5000位的數字,它只會掩蓋底部的兩位。

或者,你可以做你自己,大家都習慣的方式,以及如何與硬件的實際做的:

def rotate_left(number, rotatebits, numbits=32): 
    newnumber = (number << rotatebits) & ~((1<<numbits)-1)  
    newnumber |= (number & ~((1<<rotatebits)-1)) << rotatebits 
    return newnumber 
+0

嘿,我得到了旋轉部分覆蓋。謝謝。我有號碼0b111100000,但我想要32位,我必須使用第24位和第32位,在這種情況下爲0,並執行一些操作。 –

+1

打印所有32位可能需要一些額外的工作。但是位24和位31實際上存在;你仍然可以通過例如'(number&(1 << 24))!= 0'。 –

+0

好吧,我明白你在說什麼。但看看我的問題。我有說D = 0b111100000這是打印爲480.現在這個沒有。 D實際上是32位。我想把這個數字的第24,第0和第32位取代並用這個位替換D的MSB並得到一個新的數字E.我可以像你說的那樣訪問那些位,但是我不能將結果代入MSB –

1
bin(i)[2:].zfill(32) 

我猜你想要做什麼。

我覺得這裏你更大的問題是,你是誤會了一些和它表示的區別

12^18 #would xor the values 
56 & 11 # and the values 

,如果你需要實際的32位有符號整數,則可以使用numpy的

a =numpy.array(range(100),dtype=np.int32) 
+0

好吧,我明白你在說什麼。但看看我的問題。我已經說了D = 0b111100000這是打印爲480.現在這沒有D實際上是32位。我想把這個數字的第24,第0和第32位取代並用這個位代替D的MSB並得到一個新的數字E.和Corley說的一樣,我能夠訪問這些位,但是我不能把結果代入MSB –