【发布时间】:2014-05-25 18:33:19
【问题描述】:
我正在将一段 Ian Bell 的 Elite 从 C 转换为 Python。 C (ab) 使用 16 位整数,会溢出。 Python 使用神奇的 Python 整数,但它没有。这是个问题。
我可以只定义一个class UInt16:(更新:或使用 ctype 内置的 UInt16),它的行为就像我想要的那样,但是我必须“强制”整个程序中的每个数字都是 @987654322 @。有什么方法可以告诉我的口译员“嘿,你知道Int 吗?好吧,我希望你在每个你通常使用其中之一的地方都使用这个类。”
或者,如果做不到这一点,是否有另一种简单的方法可以实现整数溢出?
【问题讨论】:
-
这里的正确答案是“不要滥用整数”。只需手动实现“如果大于 2^16-1,则手动减去 2^16-1”。当然,这将意味着相当多的代码更改,但我认为为了可读性和定义的行为这是值得的。
-
提示:如果数字大于 2^16-1,type(huge_number) 将返回 'long'(魔法整数)。
-
使用 ctypes 中的 16 位整数
-
@slugonamission 你可能想使用模数,比如
n%(2**16)。但是 Jonathon 是正确的,ctypes 的 uint16 应该可以工作。 -
@RoyIacob:Python 3 中不再区分常规整数和长整数。现在它们都是
ints。
标签: c python-3.x porting integer-overflow