python - 波浪线对布尔值的影响——为什么在 Python 中 ~True 是 -2 而 ~False 是 -1?
问题描述
问题
我发现这~True
是-2
&~False
正在-1
使用我的 Jupyter Notebook。
该消息来源说~
反转所有位。为什么不是~True
isFalse
和~False
is True
?
推理尝试
我试图解释这些:
True
是+1
,并且 的位+1
被反转。+
倒置为-
。
1
在两位二进制中是01
,所以反转位:10
,即2
。所以结果是-2
。
False
是+0
,+
被反转为-
,0
在两位二进制中是00
, 所有位反转, 11
, 即3
- 它应该是1
.
来源
这个答案指向了一个更复杂的画面:
一个完整的 True 列表仅包含对一个规范 True 对象的 4 或 8 字节引用。
这个消息来源说:
bool:布尔(真/假)类型。支持的精度:8(默认)位。
这些不支持上述简单化(显然是错误的)推理。
问题
~True
那么,存在-2
与~False
存在的正确解释是-1
什么?
解决方案
首先,我会使用 not 运算符来反转布尔值(不是 True == False,反之亦然)。现在,如果布尔值存储为 8 位整数,则会发生以下情况:
True 是 0000 0001。因此 ~True 产生 1111 1110,这是二进制补码表示中的 -2。
False 是 0000 0000。因此 ~False 产生 1111 1111,即 -1。
推荐阅读
- java - 我可以为java中的每个元素创建带有代码的动态网格视图吗?
- python - Apache/wsgi 使用错误的 python 版本
- azure - Azure Kubernetes 服务 502 错误网关
- javascript - 如何识别 DOM 中的元素以在单击按钮事件中使用?
- ruby-on-rails - 如何使 gem WebMock 与包含 [方括号] 的 json 一起使用?
- node.js - 如何在 Postgres URL 中指定模式名称以连接到 Heroku 上的 PostgreSQL 数据库
- haskell - 在同一功能中混合 Esqueleto 和 Persistent
- javascript - SAPUI5:无法导航到定义的页面并出现错误(找不到具有 ID 布局的控件 - EventProvider sap.m.routing.Target)
- arrays - PowerShell 脚本创建文件夹,然后从 csv 修改创建日期
- android - 执行“react-native run-android”时出现错误“找不到包名称'io.invertase.firebase'的匹配客户端”