我想在Python中實現IDEA算法。在Python中,我們對可變大小沒有限制,但我需要在整數中限制位數,例如,執行循環左移。你有什麼建議?如何限制Python中整型變量的位數?
4
A
回答
3
一種方法是使用BitVector庫。使用
例子:
>>> from BitVector import BitVector
>>> bv = BitVector(intVal = 0x13A5, size = 32)
>>> print bv
00000000000000000001001110100101
>>> bv << 6 #does a cyclic left shift
>>> print bv
00000000000001001110100101000000
>>> bv[0] = 1
>>> print bv
10000000000001001110100101000000
>>> bv << 3 #cyclic shift again, should be more apparent
>>> print bv
00000000001001110100101000000100
+7
所以''<<操作就地修改自己的包裝類?我認爲這肯定是一個錯字,你的意思是寫'<< ='但你的代碼是正確的。那裏有可疑的設計選擇。 – 2010-11-17 10:31:17
2
的一個循環左移8位掩碼:
shifted = number << 1
overflowed = (number & 0x100) >> 8
shifted &= 0xFF
result = overflowed | shifted
您應該能夠使一個類,這是否適合你。再多一點,它可以將任意數量的值移出任意大小的值。
1
如果你想有一個數的低32位,可使用二進制和像這樣:
>>> low32 = (1 << 32) - 1
>>> n = 0x12345678
>>> m = ((n << 20) | (n >> 12)) & low32
>>> "0x%x" % m
'0x67812345'
2
的bitstring模塊可能會有所幫助(文檔here)。這個例子創建一個22位比特串,並旋轉位3到右:
>>> from bitstring import BitArray
>>> a = BitArray(22) # creates 22-bit zeroed bitstring
>>> a.uint = 12345 # set the bits with an unsigned integer
>>> a.bin # view the binary representation
'0b0000000011000000111001'
>>> a.ror(3) # rotate to the right
>>> a.bin
'0b0010000000011000000111'
>>> a.uint # and back to the integer representation
525831
+0
感謝您的包裝。 :) – gorlum0 2011-09-05 08:44:23
相關問題
- 1. 如何在FHIR中限制數量元素的單位類型
- 2. Python數量限制
- 3. 如何限制Golang中變量的值?
- 4. 限制R中變量的小數位數
- 5. 在Matlab中限制變量取固定的小數位數
- 6. 在Python中限制數字位數
- 7. Python - 設置變量的限制
- 8. 如何限制jquery完整日曆中的事件數量?
- 9. 如何在python隨機數限制小數點後的位數
- 10. Python - 限制進口數量?
- 11. 如何刪除python中的變量的整數值
- 12. 如何限制contentarea中使用的塊類型的數量?
- 13. 如何限制變量的作用域
- 14. 如何限制變量的長度js
- 15. 如何限制python中活動線程的數量?
- 16. 如何確定模板非類型整型常量參數中的位數?
- 17. 如何強制變量的輸入爲Ruby中的整數
- 18. 如何使一個Python變量與後面的逗號無限位數
- 19. Python中的變量和數據類型
- 20. 限制PHP中的位數
- 21. 如何檢查變量的類型? Python
- 22. 如何限制在jQuery座位圖表中選擇座位的數量
- 23. 如何限制紅寶石變量?
- 24. HTTPSession變量限制
- 25. MySQL限制變量
- 26. 如何限制數組值的數量?
- 27. 如何限制crm中的整數字段中的數字
- 28. 我如何替換python中的變量函數的整數參數
- 29. 如何用python中的變量製作隨機數字?
- 30. 如何在CSS變量中強制整數?
實現強加這些限制 – 2010-11-16 19:03:29