首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:不支持&:'NoneType‘和'BitVector’的操作数类型

TypeError:不支持&:'NoneType‘和'BitVector’的操作数类型
EN

Stack Overflow用户
提问于 2015-09-23 19:04:39
回答 1查看 541关注 0票数 1

以下是python代码。

代码语言:javascript
复制
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)

对于上面的代码,我得到了错误

代码语言:javascript
复制
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 (因为我认为这就是导致问题的原因

EN

回答 1

Stack Overflow用户

发布于 2015-09-23 19:07:39

它看起来像是BitVector.shift_left()方法返回None,大概是因为位向量发生了原地突变。

在这种情况下,不需要重新分配num,只需使用:

代码语言:javascript
复制
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),因为该版本在BitVector.shift_left()BitVector.shift_right()方法中添加了return self

在项目changelog中:

3.1版:

此版本包括:....非循环位移位方法现在返回self,以便可以链接它们;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32737875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档