2015-09-04 54 views
0

給定一個正整數(如171)和一個「寄存器」大小,例如8.將python整數轉換爲其帶符號的二進制表示

我想要的是由二進制表示171表示的整數,即'0b10101011'被解釋爲二進制補碼。

在本案中,171應該變成-85。 這是消極的,因爲給予「註冊」大小8,MSB是1.

我希望我設法解釋我的問題。 我該如何做這種轉換?

我試了一下:

size = 8 
value = 171 

b = bin(value) 

if b[len(b)-size] == '1': 
    print "signed" 
    # What to do next? 
+0

我可以問我爲什麼被否決? – stackoverflowwww

回答

3

你並不需要二進制轉換以實現:

>>> size = 8 
>>> value = 171 
>>> unsigned = value % 2**size 
>>> signed = unsigned - 2**size if unsigned >= 2**(size-1) else unsigned 
>>> signed 
-85 
2

可能有一百種不同的方式來做到這一點。這裏有一對夫婦。

如果大小是8的倍數,那麼這樣的事情會做的工作:

x = int.from_bytes(value.to_bytes(size // 8, byteorder='big'), byteorder='big', signed=True) 

如果大小不是8的倍數,那麼你可以做這樣的事情:

mask = 1 << (size - 1) 
x = (value^mask) - mask 

兩者都假定該值不太適合「註冊」。

相關問題