这是python代码。
from BitVector import *
MX = BitVector(bitstring = '00011011')
MSB_check = BitVector(bitstring = '10000000')
def multiplication_logic(num):
num = num.shift_left(1) # left shift
MSB_num = num & MSB_check # AND num with 1000 0000 to get only MSB
if MSB_num.intValue() != 0:
num = num ^ MX #XOR with 00011011
return num
for indexOfOneInPoly2 in range (0,7):
if polynomial_2[indexOfOneInPoly2] == 1 and indexOfOneInPoly2 != 0:
for numberOfIndexTimes in range (0,indexOfOneInPoly2):
temp = multiplication_logic(polynomial_1)
print(temp)
polynomial_3 = polynomial_3 + temp
print(polynomial_3)
对于上面的代码我得到了错误
Traceback (most recent call last):
File "<pyshell#126>", line 4, in <module>
temp = multiplication_logic(polynomial_1)
File "<pyshell#124>", line 3, in multiplication_logic
MSB_num = num & MSB_check
TypeError: unsupported operand type(s) for &: 'NoneType' and 'BitVector'
我怎样才能让我的函数将参数作为BitVector使用(因为这是我认为造成问题的原因)
最佳答案
看起来BitVector.shift_left()
方法返回了None
,大概是因为位向量已在适当位置发生了突变。
在这种情况下,无需重新分配num
,只需使用:
def multiplication_logic(num):
num.shift_left(1)
MSB_num = num & MSB_check # AND num with 1000 0000 to get only MSB
if MSB_num != 0:
num = num ^ MX #XOR with 00011011
return num
如果使用
BitVector
package,则需要升级到3.1版或更高版本(当前版本为3.4.4),因为该版本将return self
添加到了BitVector.shift_left()
和BitVector.shift_right()
方法中。从项目变更日志中:
版本3.1:
此版本包括:[....](3)现在,非圆形位移方法返回self以便可以链接它们;