如何看待Python的负数按位运算?

2024-05-13

我发现很难思考 Python(和 Python3)的无限精度负数和按位运算。它不是 32 位或 64 位。这1左边的 s 可以被认为是“无穷多个”。它不是很明确,这就是为什么有时很难思考它是如何运作的。

似乎一种可行的方法是:总是让它更多,例如如果您正在处理具有 67 位的正整数,那么只需考虑它们与具有 96 位或 128 位的负数的运算即可。这是正确的思考方式吗?规格中是否有任何说明其工作原理或应考虑的内容? (比如内部实现只考虑正整数,而只考虑负数“向左多1位”?)


您应该将它们视为具有无限多个 1 位。抽象地说,二进制补码 https://en.wikipedia.org/wiki/Two's_complement二进制表示has无限多个 1;并不是说可以根据需要添加更多的 1,而是那些 1已经数字表示方式的一部分。

事实上,那些无限多的位实际上并未存储在内存中,这是一个实现细节,因此,当您考虑这一点时,您应该忽略内存的限制,直到遇到以下情况:you是必须编写实现的人。如果您只是想从概念上理解这一点,则不需要考虑诸如后备位之类的事情,而且我认为这不一定有帮助。


二进制数表示 2 的幂之和,例如:

110012 = 24 + 23 + 0 + 0 + 20

数字 -1 由无限的 1 序列表示,向左无限延伸:

...11112 = ... + 23 + 22 + 21 + 20

这对于通常意义上的无穷级数来说是无稽之谈,但有充分的理由将结果定义为 -1。最直观地吸引人的原因是当你按照加法算法将 1 添加到它时会发生什么:

  ...111111111
+            1
  ――――――――――――
= ...000000000 (result)
  ――――――――――――
  ...11111111  (carry)

In the rightmost column you have 1 + 1 which is 2, or 102 in binary, so you write a 0 and carry a 1 to the next column left. Then in that column you have a 1 plus the carried 1, so you write 0 and carry another 1... and so on, ad infinitum. The result has a 0 in every position. Therefore, ...111112 must have represented -1 because we followed the algorithm to add 1, and we got a representation of 0.

If that's not satisfying enough, then there are other reasons that ...111112 ought to be interpreted as a representation of -1:

  • 无限和 1 + 2 + 4 + 8 + ... 是一个几何级数;具有恒定比率 r 的几何级数的公式为 1/(1 - r)。该公式仅适用于 -1
  • 实际上无限和 1 + 2 + 4 + 8 + ...does收敛到-12-进范数 https://en.wikipedia.org/wiki/P-adic_number.
  • 结果-1也可以通过其他定义获得,包括欧拉求和 https://en.wikipedia.org/wiki/Euler_summation, and 正如维基百科所述 https://en.wikipedia.org/wiki/1_%2B_2_%2B_4_%2B_8_%2B_%E2%8B%AF任何求和方法都是stable and linear将此和与结果 ∞ 或 -1 相关联。

我提到这些还因为它们暗示某些性质对于算术仍然成立。应用“无穷大”的加法、减法和乘法的常用算法可以给出符合算术常用属性(如结合性、交换性和分配性)的合理结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何看待Python的负数按位运算? 的相关文章

  • 测试交互式Python程序

    我想知道python的哪些测试工具支持交互式程序的测试 例如 我有一个由以下人员启动的应用程序 python dummy program py gt gt Hi whats your name Joseph 我想要仪器Joseph所以我可以
  • Pandas 在列级别连接数据帧时添加键

    根据 Pandas 0 19 2 文档 我可以提供keys参数来创建结果多索引 DataFrame 一个例子 来自 pandas 文档 是 result pd concat frames keys x y z 我将如何连接数据框以便我可以在
  • Seaborn regplot 中点和线的不同颜色

    中列出的所有示例西伯恩的regplot文档 https seaborn pydata org generated seaborn regplot html点和回归线显示相同的颜色 改变color争论改变了两者 如何为点设置与线不同的颜色 你
  • 如何使用 python http.server 运行 CGI“hello world”

    我使用的是 Windows 7 和 Python 3 4 3 我想在浏览器中运行这个简单的 helloworld py 文件 print Content Type text html print print print print h2 H
  • Scrapy Splash,如何处理onclick?

    我正在尝试抓取以下内容 我能够收到响应 但我不知道如何访问以下项目的内部数据以抓取它 我注意到访问这些项目实际上是由 JavaScript 和分页处理的 这种情况我该怎么办 下面是我的代码 import scrapy from scrapy
  • 如何计算查询集中每个项目的两个字段的总和

    假设我有以下模型结构 class SomeModel Model base price DecimalField commision DecimalField 我不想存储total price在我的数据库中为了数据一致性并希望将其计算为ba
  • Django 说“id 可能不为 NULL”,但为什么会这样呢?

    我今天要疯了 我只是尝试插入一条新记录 但它返回了 post blogpost id 可能不为 NULL 错误 这是我的模型 class BlogPost models Model title models CharField max le
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • 为什么在 __init__ 函数中声明描述符类会破坏描述符功能?

    在下面的 B 类中 我想要 set 每当您赋值给 A 类中的函数时 就会调用该函数B a 相反 将值设置为B a覆盖B a与价值 C类分配给C a工作正常 但我想为每个用户类都有一个单独的 A 实例 即我不想在 C 的一个实例中更改 a 来
  • 检查列表是否已排序的 Pythonic 方法

    有没有一种Python式的方法来检查列表是否已经排序ASC or DESC listtimestamps 1 2 3 5 6 7 就像是isttimestamps isSorted 返回True or False 我想输入一些消息的时间戳列
  • Python 在 64 位 vista 上获取 os.environ["ProgramFiles"] 的错误值

    Vista64 计算机上的 Python 2 4 3 环境中有以下2个变量 ProgramFiles C Program Files ProgramFiles x86 C Program Files x86 但是当我运行以下命令时 impo
  • TypeError:“NoneType”对象不可下标[重复]

    这个问题在这里已经有答案了 错误 names curfetchone 0 TypeError NoneType object is not subscriptable 我尝试检查缩进 但仍然有错误 我读到 如果数据库中没有文件名记录 变量名
  • Django - 使 ModelForm(ImageField 的)仅接受某些类型的图像

    我将 Pillow 2 3 0 与 Django 一起使用 并且在 models py 中有一个 ImageField 如下所示 class UserImages models Model user models ForeignKey Us
  • 如何在python中访问矩阵每个元素的相邻单元格?

    这里 如果两个单元共享边界 则它们被认为是相邻的 例如 A 5 6 4 2 1 3 7 9 8 这里 索引 0 0 的相邻元素位于索引 0 1 和 1 0 处 索引 1 1 的相邻元素位于索引 0 1 1 0 2 1 处 和 1 2 假设你
  • 在 Python 中将嵌套字典位置作为参数传递

    如果我有一个嵌套字典 我可以通过索引来获取键 如下所示 gt gt gt d a b c gt gt gt d a b c 我可以将该索引作为函数参数传递吗 def get nested value d path a b return d
  • 如何在自定义 django 命令中抽象出命令代码

    我正在我的应用程序下编写自定义 django 命令management commands目录 目前我在该目录中有 6 个不同的文件 每个文件都有不同的命令来解决独特的需求 然而 有一些实用程序是它们所共有的 抽象出这些公共代码的最佳方法是什
  • 如何使用 Python 实现并行 gzip 压缩?

    使用python压缩大文件 https stackoverflow com questions 9518705 big file compression with python给出了一个很好的例子来说明如何使用例如bz2 纯粹用 Pytho
  • 获取 python 模块的 2 个独立实例

    我正在与以非 OO 方式编写的 python 2 x API 进行交互 它使用模块全局范围来处理一些内部状态驱动的东西 在它不再是单例的情况下需要它 并且修改原始代码 不是我们的 不是一个选择 如果不使用单独解释器的子进程运行 有什么方法可
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后

随机推荐