TypeError:Python中的一元〜:'long'的坏操作数类型

时间:2014-11-09 19:56:10

标签: python bit-manipulation typeerror unary-operator

我来自C背景,因此Python中的这个问题让我很困惑

考虑一下

print ~(1 << 1)

这正确打印-3

考虑一下

print ~(1 << 0)

这会标记错误,如

TypeError: bad operand type for unary ~: 'long'

我检查了班次计数的各种其他正值,它运行正常。只有零班次似乎不起作用。我在SO上找到的关于一元运算符的所有类似帖子都涉及其他运算符,例如+-等但不是~

我偶尔会涉猎Python,所以我可能会遗漏一些愚蠢的东西,但google搜索帮助很多

PS:我在codeskulptor上运行了这可能是使用Python 2.7,但我不确定

编辑:这是Codeskulptor中的一个错误。我写了一封邮件给Rixner教授,他是主要的开发人员,注意到这个bug。谢谢大家。

2 个答案:

答案 0 :(得分:2)

这是CodeSkulptor实现的错误。

如果强制该值返回int,则可以:

print ~(int(1 << 0))

好吧,也许'错误'太强了 - 看着他们的网站,他们只声称“实现了Python 2的一个子集”。

答案 1 :(得分:0)

这适用于Python2和Python3;演示:

$ python --version
Python 2.7.6
$ python -c 'print(~(1<<0))'
-2

$ python3 --version
Python 3.4.2
$ python3 -c 'print(~(1<<0))'
-2

您能否展示一下您的脚本并解释您正在使用的Python版本(以及哪些实现!)?