我来自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。谢谢大家。
答案 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版本(以及哪些实现!)?