我正在将 Ian Bell 的《精英》的一段内容从 C 转换为 Python。 C(ab)使用16位整数,会溢出。 Python 使用神奇的 Python 整数,但实际上却没有。这是一个问题。
我可以定义一个 class UInt16:
(更新:或者使用 UInt16 中内置的 ctype),它的行为就像我想要的那样,但随后我必须“强制”中的每个数字整个程序是 UInt16
。我有什么办法可以告诉我的解释器“嘿,你知道Int
吗?好吧,我希望你在你通常会使用其中一个类的每个地方都使用这个类。”
或者,如果做不到这一点,是否有另一种简单的方法可以实现整数溢出?
最佳答案
简短回答:无法按照您的意愿覆盖默认的整数行为。
更长的答案:
首先,我们可以看到Python中存在几种16位无符号整数的实现:
- 在内置库
ctypes
中,16 位无符号整数可用作c_uint16
- Numpy 库还包含
unint16
- 实现您自己的 uint16 数据类型(使用运算符重载等)
我们是否可以使用这些或其他一些数据类型来覆盖 Python 中的默认整数,这个问题比较棘手。
假设用户使用 int
方法创建程序中的所有整数。如果是这种情况,那么我们可以包装 int 方法来创建无符号整数而不是常规整数:
from ctypes import c_uint16
_int = int
def int(x):
return c_uint16(x)
例如,以下代码可以正常工作:
a = int(1)
我们可以检查:
>>> type(a)
<class 'ctypes.c_ushort'>
问题来了:
b = 1
在这种情况下,不会调用 int
方法,而是简单地为 b
分配值 1
。我们希望做的就是覆盖这种行为,但不幸的是 it is not possible .
关于c - python 中的整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858626/