为什么使用 ~ returns -2 而不是 false?

Why does using ~ returns -2 instead of false?

我想检查一个文件是否不存在,我可以简单地使用“not”而不是 ~,但我很好奇为什么它会这样工作?为什么它不 return -1 例如?谁能教教我?

示例:

"file.csv"在这个例子中确实存在

代码 1

not os.path.isfile("file.csv")

输出:

False


代码 2

~os.path.isfile("file.csv")

输出:

-2

也许这会让事情变得更清楚。

假设您的文件 'file.csv' 存在。

然后您可以断言:

os.path.isfile("file.csv") == True

您还可以断言(在 Python 和其他一些语言中):

True == 1

在Python中,波浪号是按位补码运算符。这意味着应用运算符的值中的所有位都被反转。

如果您想象整数被限制为一定数量的位数(在 Python 中不是这种情况,但例如在 C 中会是这种情况),那么这就更容易描述了。为简洁起见,假设有符号整数以 16 位描述。因此,十进制 1 的二进制表示将是 0000000000000001.

现在对该值应用补码运算符,您将得到 1111111111111110 - 即,所有位都反转

因为最高位是1所以这是一个负数。

其实就是十进制-2的16位表示