python - 为什么 ~True 结果是-2?

在 Python 控制台中:

~True

给我:

-2

为什么?有人可以用二进制向我解释这个特殊情况吗?

最佳答案

int(True)1

1 是:

00000001

~1是:

11111110

这是Two's complement中的-2 1

1 翻转所有位,将结果数加 1 并将结果解释为幅度的二进制表示并添加负号(因为数字开始1):

11111110 → 00000001 → 00000010 
         ↑          ↑ 
       Flip       Add 1

这是 2,但符号为负,因为 MSB是 1。


值得一提:

想想bool,你会发现它本质上是数字——它有两个值,TrueFalse,它们是只是整数 1 和 0 的“定制”版本,它们只会以不同的方式打印自己。它们是整数类型int子类

因此它们的行为与 1 和 0 完全相同,只是 bool 重新定义了 strrepr 以不同方式显示它们。

>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True

>>> True == 1
True
>>> True is 1  # they're still different objects
False

https://stackoverflow.com/questions/21881362/

相关文章:

linux - 有没有办法检查是否有指向目录的符号链接(symbolic link)?

javascript - 可以使用 scrapy 从使用 AJAX 的网站中抓取动态内容吗?

python - SQLAlchemy:打印实际查询

python - 关于如何在 python 中使用属性功能的真实示例?

c++ - Netbeans 7.2 显示 "Unable to resolve identifie

linux - Git 状态忽略行尾/相同文件/windows & linux 环境/dropbox

python - set() 是如何实现的?

linux - ELF文件格式中的section和segment有什么区别

python - Python 3.3+ 中的包不需要 __init__.py

python - 在 Python 中拆分空字符串时,为什么 split() 返回一个空列表,而 s