为什么使用 ~ 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位表示
我想检查一个文件是否不存在,我可以简单地使用“not”而不是 ~,但我很好奇为什么它会这样工作?为什么它不 return -1 例如?谁能教教我?
示例:
"file.csv"在这个例子中确实存在
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位表示