1

これが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 として持たせるにはどうすればよいですか (これが問題を引き起こしていると考えているため)

4

1 に答える 1

2

おそらくビットベクトルがその場で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パッケージを使用している場合は、バージョン 3.1 以降 (現在のリリースは 3.4.4) にアップグレードする必要があります。そのリリースは および メソッドに追加さreturn selfれていBitVector.shift_left()ますBitVector.shift_right()

プロジェクトの変更ログから:

バージョン 3.1:

このバージョンには以下が含まれます: [....] (3) 非循環ビット シフト メソッドは、連鎖できるように self を返すようになりました。

于 2015-09-23T11:07:38.990 に答える