为什么python按位运算符不能处理bin()返回的内容
我一直在做一些关于位运算符的工作,通常是从使用bin转换整数开始的。我每次尝试都会出错为什么python按位运算符不能处理bin()返回的内容,python,python-3.x,bitwise-operators,Python,Python 3.x,Bitwise Operators,我一直在做一些关于位运算符的工作,通常是从使用bin转换整数开始的。我每次尝试都会出错 foo = 5 binfoo = bin(foo) bar = ~(binfoo) 最后一行是我们搞砸的地方 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: bad operand type for unary ~: 'str' 如果bin返回一个字符串,那么这些位运
foo = 5
binfoo = bin(foo)
bar = ~(binfoo)
最后一行是我们搞砸的地方
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary ~: 'str'
如果bin返回一个字符串,那么这些位运算符需要什么?一元位运算符需要整数输入。在Python参考文档的表达式一章中:
一元~invert运算符生成其整数参数的按位反转。x的位反转定义为-x+1。它只适用于整数
我的
将~应用于5个工程即可:
>>> ~5
-6
bin函数只返回一个以二进制形式表示的字符串对象。可以将其视为一种调试工具,它可以快速向您显示整数的设置位和未设置位。要实际操作位,您仍然需要一个整数。按位运算符需要整数,请尝试~foo。bin函数用于为输出创建二进制字符串表示。因为bin返回字符串,所以不是整数位运算符处理整数,而不是字符串。在引擎盖下的整数是位模式,位运算符直接处理位模式。它们不处理那些位模式的字符串表示。为什么您认为按位运算符通常从使用bin开始?事实上,他们从来没有这样开始过。不过,这是一个有用的问题,因为对于编程新手来说,这是一个相当自然的问题。我认为它不值得投反对票。