我有公式:(short)(0xF800 |(N & 0x7ff))。在C/CPP/C#的幫助下,我改變了八位數字的符號(例如1202數字-846)。在Python中,這個技巧是行不通的。我如何得到相同的結果?python中的位操作
1
A
回答
0
如果你想與C(++)類型工作,你將需要使用struct或ctypes模塊
此方法使用結構爲整數包成字節串,則它解爲不同類型的。
>>> import struct
>>> N = 1202
>>> struct.unpack('h', struct.pack('H',0xf800|(N & 0x7ff)))[0]
-846
該方法使用具有類似於你在C什麼的內部表示ctypes的(++)
>>> from ctypes import c_short
>>> N = 1202
>>> c_short(0xf800|(N & 0x7ff)).value
-846
+0
什麼是更快? ctypes或結構? –
+0
性能可能並不是這裏的重要問題,因爲一旦你掌握了數據,你將如何處理這些數據。如果你只是一次轉換一個值,並且不需要寫出原始字節串,那麼ctypes就可以。否則,你可能想要結構。 –
0
也許有人會需要:
從ctypes的導入c_short C_short(0xF800 |(N & 0x7ff))。值
2
Python中的整數具有無限長度。要創建一個負數,您需要設置最高位,但Python沒有「頂級」 - 您無法通過位操作來完成此操作。你可以做的是將一個正數轉換爲負數與減法。
bits = 0xf800 | (N & 0x7ff)
if bits & 0x8000:
bits -= 0x10000
既然你已經知道了最高位設置,這將簡化:
bits = (0xf800 | (N & 0x7ff)) - 0x10000
相關問題
- 1. python中的按位操作
- 2. Python中的多位操作
- 3. python按位操作
- 4. Python中的圖像位操作
- 5. 瞭解Python中的位操作函數
- 6. 如何操作Python中的位?
- 7. Python列表按位操作
- 8. Python和按位操作
- 9. Python:逐位列表操作
- 10. Python中位運算符 '&' 操作
- 11. c - 解密中的位操作/操作
- 12. 按位操作的操作
- 13. 如何在Python中理解i&-i?在Python中的位操作
- 14. 32位體系結構中的64位操作數的操作?
- 15. 位操作中的Java
- 16. c中的位操作
- 17. java中的BigDecimal位操作
- 18. 裝配中的位操作
- 19. Python的操作
- 20. Python的操作
- 21. =操作中的boost :: Python的
- 22. 使用Python來操作31位
- 23. 位異或操作者在python
- 24. Python和C.位操作,.split()函數
- 25. 位操作在XML中的Delphi - 按位
- 26. Python中的新操作符
- 27. Python中的文件操作
- 28. Python中的AST操作
- 29. Python中的操作菜單
- 30. Python中的字典操作
數量不是八位,它是11位!錯字 –
你想要實現什麼目標?爲什麼你需要將高五位設置爲1?你是否意識到這一點,0xF800 | (N&0x7FF)== 0xF800 | N + – zstewart